首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB中的逐行比较

MATLAB中的逐行比较
EN

Stack Overflow用户
提问于 2014-09-28 14:13:23
回答 2查看 130关注 0票数 0

我想用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随机矩阵):

代码语言:javascript
复制
    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);

这会耗尽内存。有没有人能推荐一个解决方案或者更有效的代码?

EN

回答 2

Stack Overflow用户

发布于 2014-09-28 18:08:42

您可以直接尝试逐行比较,就像获取完整的行数组并与另一个行数组进行比较一样。

例如,让

代码语言:javascript
复制
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

看看是否适合您的应用程序。

票数 0
EN

Stack Overflow用户

发布于 2014-09-28 20:15:41

您可以使用permute对齐尺寸,然后使用bsxfun进行比较:

代码语言:javascript
复制
reshape(bsxfun(@eq, permute(A, [1 3 2]), permute(A, [3 1 2])), [], size(A,2))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26082200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档