Retrieving a random element from each row in a matrix
8 views (last 30 days)
Show older comments
hi everyone
I have a 20 by 10 matrix. I am running the following code to retrieve a random element from each row of the matrix. In this case, I need to create a 20 by 1 matrix at the end. I have written the following code but it does give me a shuffle of the first column alone.
sz=size(R,1);
B=zeros(sz,1);
i=1:20
% for n=1:100
for j=1
for i=1:20
for row=1:20
M(i,j)=randi(length(R),20,1);
B(i,j)=R(M(i,j));
end
end
end
% end
2 Comments
Accepted Answer
Star Strider
on 23 May 2019
It is likely easier to use the sub2ind funciton to create linear indices into ‘R’ from a defined list of random column subscripts:
R=randi(1000,20,10);
idx = sub2ind(size(R), (1:size(R,1))', randi(size(R,2),size(R,1),1));
B = R(idx)
The second argument defines the row indices and the third defines the random column indices.
See if that does what you want.
13 Comments
Star Strider
on 24 May 2019
As always, my pleasure.
The output of the randi function is uniformly distributed, not normally distributed. If you were to use the normal distribution instead (the randn function being one such), and you did not change the mean and standard deviation to create the ‘R’ matrix, the data would remain normally distributed.
If you do not otherwise change the parameters of the distribution you are using to create the matrix, the matrix should retain the properties of that distribution, regardless of how you sample it.
More Answers (0)
See Also
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!