creating weighted sample for a matrix

7 visualizaciones (últimos 30 días)
Sophia
Sophia el 8 de Mayo de 2012
Editada: Michele Pio Papasidero el 26 de Abr. de 2021
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.

Respuesta aceptada

Sophia
Sophia el 9 de Mayo de 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 comentario
Michele Pio Papasidero
Michele Pio Papasidero el 25 de Abr. de 2021
Editada: Michele Pio Papasidero el 26 de Abr. de 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?

Iniciar sesión para comentar.

Más respuestas (1)

Sean de Wolski
Sean de Wolski el 8 de Mayo de 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