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

조회 수: 4 (최근 30일)
Raphael
Raphael 2020년 3월 25일
답변: Stephen23 2020년 3월 25일
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?
  댓글 수: 1
KSSV
KSSV 2020년 3월 25일
YOu want to select two elements from each column randomly?

댓글을 달려면 로그인하십시오.

채택된 답변

David Hill
David Hill 2020년 3월 25일
B=A(randi(size(A,1),2,size(A,2))+(0:size(A,2)-1)*size(A,1));
  댓글 수: 1
Raphael
Raphael 2020년 3월 25일
That is exactly what I wanted!
Very clever, David.
Thank you!

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Birdman
Birdman 2020년 3월 25일
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 2020년 3월 25일
>> 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

카테고리

Help CenterFile Exchange에서 Multidimensional Arrays에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by