How can I sample n elements from each column of a matrix?

3 visualizzazioni (ultimi 30 giorni)
I have this matrix:
A =
1 5 9 13 17
2 6 10 14 18
3 7 11 15 19
4 8 12 16 20
I want to sample n elments with replacement from each column. For instance, if n=2, I would like to get something like:
B =
2 8 10 14 20
4 8 9 15 17
I tried datasample, but it samples entire rows. Is there an efficient way to do this without using a for loop?

Risposta accettata

David Hill
David Hill il 25 Mar 2020
B=A(randi(size(A,1),2,size(A,2))+(0:size(A,2)-1)*size(A,1));

Più risposte (2)

Birdman
Birdman il 25 Mar 2020
Following approach can be used(using for loop):
n=2;
for i=1:size(A,2)
y(:,i)=randsample(A(:,i),n);
end
y

Stephen23
Stephen23 il 25 Mar 2020
>> X = sub2ind([4,5],randi(4,2,5),[1:5;1:5]);
>> B = A(X)
B =
3 8 9 13 20
3 7 10 15 20

Categorie

Scopri di più su Multidimensional Arrays in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by