creating weighted sample for a matrix

8 Ansichten (letzte 30 Tage)
Sophia
Sophia am 8 Mai 2012
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.

Akzeptierte Antwort

Sophia
Sophia am 9 Mai 2012
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 Kommentar
Michele Pio Papasidero
Michele Pio Papasidero am 25 Apr. 2021
Bearbeitet: Michele Pio Papasidero am 26 Apr. 2021
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?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Sean de Wolski
Sean de Wolski am 8 Mai 2012
(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