我想用MATLAB将矩阵的每一行与它的每一行进行逐个元素的比较。如果其中两个条目匹配,则结果将存储为1,如果它们不匹配,则结果将为0。这将得到一个由0和1组成的对称矩阵。
例如,设A=4 6 7 95;2 6 9 9 1
然后,预期的结果为1 1 1;0 1 0 1 0;0 1 0 1 0;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);这会耗尽内存。有没有人能推荐一个解决方案或者更有效的代码?
发布于 2014-09-28 18:08:42
您可以直接尝试逐行比较,就像获取完整的行数组并与另一个行数组进行比较一样。
例如,让
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看看是否适合您的应用程序。
发布于 2014-09-28 20:15:41
您可以使用permute对齐尺寸,然后使用bsxfun进行比较:
reshape(bsxfun(@eq, permute(A, [1 3 2]), permute(A, [3 1 2])), [], size(A,2))https://stackoverflow.com/questions/26082200
复制相似问题