我想使用MATLAB來將矩陣的每一行與其每隔一行逐元素地進行比較。如果兩個條目匹配,結果將被存儲爲1,如果它們不匹配,則它將爲0.這將給出由0和1組成的對稱矩陣。在MATLAB中逐行比較
例如,令A = [4 6 7 9 5; 2 6 9 9 1]
然後,預期的結果是[1 1 1 1 1; 0 1 0 1 0; 0 1 0 1 0; 1 1 1 1 1]
我使用的代碼是(對於1000 * 1000個隨機矩陣):
A = randi(50,1000,1000);
B = zeros(1000000,1000);
D = zeros(1000000,1);
c=0;
for i=1:1000
for k=1:1000
for j=1:1000
if A(i,j)==A(k,j)
B(k+c,j)=1;
else
B(k+c,j)=0;
end
end
end
c=c+1000;
end
for l=1:1000000
D(l)=0;
for m=1:1000
D(l)=D(l)+(B(l,m)/(1000));
end
end
E=reshape(D,1000,1000);
這超出存儲器。任何人都可以請建議一個解決方案或更有效的代碼?
在哪一行它出去的內存? – Divakar 2014-09-28 06:27:04
你會意識到,如果你想檢查每一行可能的組合,你的矩陣將會有'n^2'行,其中'n'是矩陣中的行數。您擁有的列數是1000 ....因此,您的最終矩陣是'1000000 x 1000'。此外,每個「雙」是8個字節,所以你的總矩陣大小是8 GB ....所以顯然你會用盡內存。也許你應該把你的矩陣轉換成邏輯,但是這會把你的大小減小到1GB。如果您希望此代碼正常工作,您需要減小矩陣的大小。 – rayryeng 2014-09-28 06:44:44
@rayryeng:你說得對。但我無法縮小矩陣的大小。有沒有其他方式可以進行比較? – 2014-09-28 07:12:58