2014-05-08 167 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; 

在這裏,我們從一個元素去其他在第一列,並將其與前面的所有元素進行比較。如果發現巧合,該行的元素正在重新排列,直到我們得到與其他值不同的值。