creating weighted sample for a matrix

6 ビュー (過去 30 日間)
Sophia
Sophia 2012 年 5 月 8 日
編集済み: Michele Pio Papasidero 2021 年 4 月 26 日
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 月 25 日
編集済み: 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