creating weighted sample for a matrix

8 次查看(过去 30 天)
I need to create a sample from an m by n matrix. Each row has a probability associated with it and can be treated as one observation. I need to draw N (the sample size) number of these rows based on their assigned probability. The problem is that randsample only takes a vector as input such as this example:
R = randsample([1 2 3], N, true, [0.5 0.25 0.25])
Whereas I need something like this:
R = randsample([1 2 3; 4 5 6; 7 8 9], N, true, [0.5 0.25 0.25])
So far I've not found an answer from Google, so I'd appreciate any pointers.

采纳的回答

Sophia
Sophia 2012-5-9
Thanks Sean, I figured it out. I add a unique ID to the first column of the sample matrix (route_sample) and perform randsample on that; then I use the FIND function to pull the actual sample values in.
%create random exogenous demand sample
R_tmp = randsample(route_sample(:,1),N,true,route_sample(:,8));
R_demand = zeros(N,size(route_sample,2)-2);
for i = 1:size(R_tmp,1);
[r1,~,~] = find(R_tmp(i,1)==route_sample(:,1));
R_demand(i,:) = route_sample(r1,2:7);
end;
  1 个评论
Michele Pio Papasidero
编辑:Michele Pio Papasidero 2021-4-26
Dear Sophia, i have a similar issue (https://it.mathworks.com/matlabcentral/answers/812345-weighted-random-sampling-for-matrix). I tried to adapt this code to my situation but it does not work. Can you help me?

请先登录,再进行评论。

更多回答(1 个)

Sean de Wolski
Sean de Wolski 2012-5-8
(Unless I'm missing something (which is certainly possible (probable))) This could easily be done with a for-loop.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by