【问题标题】:Is there a way to mask a matrix in matlab based on elements in an array?有没有办法根据数组中的元素在matlab中屏蔽矩阵?
【发布时间】:2023-03-16 11:45:02
【问题描述】:

假设我有一个矩阵a = [1,2,3;4,1,2;3,4,2]

我需要创建一个逻辑矩阵,即1,只要a 中有b 的元素。如果我的数组b 是像[1,4] 这样的小数组,则相当于a==4 | a==1

我知道一种方法是:

b = [1,4];
c = logical(zeros(size(a)));
for i=b
    c = c | a==i;
end

如果ab 很大,此解决方案可能无法很好地扩展。有没有更简洁的方法来处理更大的数组?

我希望a == b 能给我想要的东西,但它没有。

【问题讨论】:

  • + 给出一个double 矩阵,而逻辑| 给出一个逻辑矩阵。这两个操作在其他方面是相同的。我实际上正在寻找一个解决方案来处理更大的数组,而不仅仅是[1,4]
  • 嗯,logical() 不只是实现逻辑 OR 运算符无论如何都会做的事情的迂回方式吗?我已经进行了编辑,以使有关可扩展性的问题更加明确

标签: matlab


【解决方案1】:

您可以使用ismember 输出一个逻辑数组,只要第一个输入的元素是第二个输入的成员,该数组就为真。输出与第一个输入的大小相同。

c = ismember( a, b );

在你的例子中:

a = [1,2,3;
     4,1,2;
     3,4,2];
b = [1,4];
c = ismember( a, b );
% >> c = 
%    [1,0,0;
%     1,1,0;
%     0,1,0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2016-07-31
    • 2018-01-23
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多