MATLAB中的逐行比较

时间:2014-09-28 06:13:23

标签: matlab matrix comparison

我想使用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);

内存不足。任何人都可以建议一个解决方案或更有效的代码吗?

2 个答案:

答案 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)

您可以使用permute来对比维度,然后使用bsxfun进行比较:

reshape(bsxfun(@eq, permute(A, [1 3 2]), permute(A, [3 1 2])), [], size(A,2))