我想使用MATLAB逐个元素地逐行比较矩阵的每一行与其它每一行。如果两个条目匹配,则结果将存储为1,如果它们不匹配,则它将为0.这将给出由0和1组成的对称矩阵。
例如,设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);
内存不足。任何人都可以建议一个解决方案或更有效的代码吗?
答案 0 :(得分:0)
您可以直接尝试逐行比较,获取完整的行数组并与其他行数组进行比较。
例如, 让
A = [4 6 7 9 5; 2 6 9 9 1];
nA = length(A(:,1));
finalMat = [];
for i = 1:nA
matRow = ones(nA,1)*A(i,:); % create a matrix size of A consists of same row elements
finalMat = [finalMat;matRow == A];
end
看看你的申请是否合适。
答案 1 :(得分:0)