How to sort the elements of a matrix in a random order

4 次查看(过去 30 天)
I have three matrix
A=[4,5,8,1,6,3]', B =[1,2,3,7,9,6]' and C=[3,1,2,4,7,9]'
and I want to generate X=[A B C] such that each element in A,B,C is randomly placed. I amusing Matlab 2007b

采纳的回答

Sean de Wolski
Sean de Wolski 2012-8-28
编辑:Sean de Wolski 2012-8-28
So you want each column to be sorted randomly but to still be in the column it came from?
A=[4,5,8,1,6,3]';
B=[1,2,3,7,9,6]';
C=[3,1,2,4,7,9]';
ABC = [A B C]; %concatenate
[~,idx] = sort(rand(size(ABC))); %random indexes
ABCrand = ABC(bsxfun(@plus,idx,0:size(ABC,1):(numel(ABC)-1))) %keep columns aligned
If you don't care about elements staying in their columns, just use randperm. Of course you could always use a for-loop with randperm above, but I won't miss any opportunity to insert a bsxfun somewhere :)
  2 个评论
Chimezie Umezie
Chimezie Umezie 2012-8-28
编辑:Chimezie Umezie 2012-8-28
I am getting the following error message: ??? [~,idx] = sort(rand(size(ABC))) | Error: Expression or statement is incorrect--possibly unbalanced (, {, or [.
I am using Matlab 7.5.0
Sean de Wolski
Sean de Wolski 2012-8-28
If you are on 2007b then you probably need a junk value instead of a '~'
[junk,idx] = sort(rand(size(ABC))); %random indexes

请先登录,再进行评论。

更多回答(3 个)

Matlabbey
Matlabbey 2012-8-28
maybe you could try making a new random matrix and sorting by those values.

Azzi Abdelmalek
Azzi Abdelmalek 2012-8-28
编辑:Azzi Abdelmalek 2012-8-28
A=[4,5,8,1,6,3]', B =[1,2,3,7,9,6]', C=[3,1,2,4,7,9]'
nA=length(A);
a1=perms(1:nA);nA1=size(a1,1);
res=[A(a1(round(nA1*rand(1,1)),:)); B(a1(round(nA1*rand(1,1)),:)); C(a1(round(nA1*rand(1,1)),:))]
  2 个评论
Chimezie Umezie
Chimezie Umezie 2012-8-28
编辑:Chimezie Umezie 2012-8-28
I am getting the following error message when I used your solution:
"??? Undefined function or method 'randi' for input arguments of type 'double'." My Matlab version is 7.5.0

请先登录,再进行评论。


Andrei Bobrov
Andrei Bobrov 2012-8-28
abc = [A,B,C]
[~,idx] = sort(rand(size(abc)))
out = abc(sub2ind(size(abc),idx,ones(size(abc,1),1)*(1:size(abc,2))));

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by