【问题标题】:Compare row-wise two matrices in Matlab在 Matlab 中逐行比较两个矩阵
【发布时间】:2017-03-22 06:30:13
【问题描述】:

我有两个矩阵要在 Matlab 中进行比较,维度为 MxNA 和维度为 MxNC。 如果有i,我想获得一个等于1 的索引,这样A(i,:) 不同于C(i,:)0,否则。

例如

A=[1 2 3; 4 5 6; 7 8 9];
C=[1 2 3; 4 5 6; 10 11 12];
index=1;

我想要最快的代码。

另外,如果与之前不同,您能否提供第二个版本的代码,以应对这种情况

(1) A 只包含零和一和C=zeros(M,N),并且

(2) A 仅包含零和一以及C=ones(M,N)

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您可以使用isequal 执行逐元素相等,然后使用~ 否定它,以查看是否存在AC 不同的情况。

    index = ~isequal(A, C)
    

    如果 AC 是浮点数,那么您将不希望使用 exact 相等性检查并使用类似

    index = ~any(abs(A(:) - C(:)) < eps);
    

    至于你问题的第二部分,你必须添加一个额外的条件

    index = ~isequal(A, C) || ...
            (all(ismember(A(:), [0 1])) && (all(C(:) == 0) || all(C(:) == 1)));
    

    【讨论】:

    • 谢谢。为什么我必须为我的问题的第二部分添加其他条件?
    • 我不明白,抱歉。假设A=[1 1 1; 0 1 0; 1 0 1]C=[0 0 0; 0 0 0; 0 0 0]。然后index = ~isequal(A, C) 根据需要给我 1。 (all(ismember(A(:), [0 1])) &amp;&amp; (all(C(:) == 0) || all(C(:) == 1)))的其他条件是什么?
    • @user3285148 但如果 A 和 C 都是零,你也会期望一个 1
    • 如果A=zeros(3,3)C=zeros(3,3),通过index=~isequal(A,C) 我得到零。
    • @user3285148 但是如果AC 都是零,那么就满足这个条件:“A 只包含零和一并且C=zeros(M,N)”
    猜你喜欢
    • 2017-08-13
    • 2010-10-30
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2020-07-15
    • 2013-08-08
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多