2014-05-08 127 views
1

我创建了矩阵:A具有随机数字1-8,每个元素每行重复4次,A有6行32列。我知道有更优雅的方式来做到这一点,但我是一个初学者的matlab,所以我用我的知识有...矩阵的半随机化

A1 = [1:8,1:8,1:8,1:8]; 
A1 = A1(randperm(length(A1))); 
A2 = [1:8,1:8,1:8,1:8]; 
A2 = A2(randperm(length(A2))); 
A3 = [1:8,1:8,1:8,1:8]; 
A3 = A3(randperm(length(A3))); 
A4 = [1:8,1:8,1:8,1:8]; 
A4 = A4(randperm(length(A4))); 
A5 = [1:8,1:8,1:8,1:8]; 
A5 = A5(randperm(length(A5))); 
A6 = [1:8,1:8,1:8,1:8]; 
A6 = A6(randperm(length(A6))); 
Aall(1,:)=A1; 
Aall(2,:)=A2; 
Aall(3,:)=A3; 
Aall(4,:)=A4; 
Aall(5,:)=A5; 
Aall(6,:)=A6; 

现在我想确保每一行的第一个元素“ Aall“不等于其他行的所有其他第一个元素(或者:矩阵的第一列以不同的数字开头),使用函数。我努力创建这个函数......任何帮助都是值得赞赏的!并且连续重复一行中的同一元素(例如5 5)是不允许的。我如何在一个函数中实现它?

+0

你说 - '“每行的第一个元素不等于所有其他的”'。对于其他人,你的意思是其他行中的其他第一个元素或同一行中的其他元素? – Divakar

+0

我的意思是其他行的第一个元素,对不起! – user3615652

回答

0

我会提出这个解决方案

for j=2:6 
    while max(Aall(j,1)==Aall(1:j-1,1)) 
     z = randperm(size(Aall,2)); 
     Aall(j,:)=Aall(j,z); 
    end; 
end; 

在这里,我们从一个元素去其他在第一列,并将其与前面的所有元素进行比较。如果发现巧合,该行的元素正在重新排列,直到我们得到与其他值不同的值。