【问题标题】:How to check in MATLAB if a vector only contains zeros?如果向量仅包含零,如何在 MATLAB 中检查?
【发布时间】:2011-02-21 20:35:18
【问题描述】:

检查向量是否仅包含零的“MATLAB 方式”是什么,以便将其评估为标量而不是向量。如果我运行这段代码:

vector = zeros(1,10)

%the "1" represents a function that returns a scalar
if 1 && vector == 0   %this comparision won't work
    'success'
end

我得到错误:

??? || 的操作数和 && 运算符必须可转换为 逻辑标量值。

【问题讨论】:

  • 您得到的错误是因为您在标量和向量之间使用了&& 运算符。要比较大小相等的向量,请使用 & 运算符获取逻辑数组。否则,您必须使用其他函数(例如 anyall)将向量缩减为单个标量。

标签: matlab


【解决方案1】:

使用all:

vector = zeros(1,10)
if 1 && all(vector == 0)   %this comparision will work
    'success'
end

【讨论】:

  • 需要注意的是你不需要1 &&。它没有任何作用。
  • @gnovice:我实际上没有1,而是一个返回标量的函数。
  • @Lucas:哦,好的。现在这是有道理的。不过,我会在 some_fcn(...) && 之类的代码中放置一个占位符,以使其更清晰。
  • @gnovice:你是对的。我编辑了我的问题,但不想删除1,否则答案看起来很奇怪。如果我没有逻辑操作数,问题就不存在了。
【解决方案2】:

由于零的处理方式与false 相同,因此您无需像ptomato 所建议的那样使用vector == 0~any(vector) 是仅检查零值的“MATLAB 方式”。

if 1 && ~any(vector)   
    'success'
end

将问题扩展到数组,您必须使用

array = zeros(5);
if 1 && ~any(array(:))
    'success'
end

【讨论】:

    【解决方案3】:

    有点晚了,nnz (Number of Non-Zeros) 怎么样?

    if 1 && nnz(vector)==0
        'success'
    end
    

    【讨论】:

      【解决方案4】:

      您可以使用以下命令轻松找出 vector 中是否有任何条目以及有多少条目包含非零元素:

      vector = zeros(1, 10); 
      nrNonZero = sum(vector~=0)
      

      vector~=0 返回一个与vector 相同维度的数组,其中包含0 和1,代表给定语句的真假。然后变量nrNonZero 包含vector 中非零元素的数量。

      因此,您的代码将是

      if (sum(vector~=0) == 0)
          'success'
      end
      

      【讨论】:

        【解决方案5】:

        你也可以这样做:

        if(boolFunCall() & ~vector)
            disp('True');  
        else
            disp('False');
        end
        

        正如 Doresoom 所说,您的问题在于使用 && 而不是 &。此外,~ 将所有 1 和 0 反转,从而将零向量变为 1 向量:

        test = [0 0 0 0 0 0];
        ~test
        ans =
        
             1     1     1     1     1     1     1
        test = [1 0 0 1 0 1 0 0 0];
        ~test
        ans =
        
             0     1     1     0     1     0     1     1     1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-11
          • 1970-01-01
          • 2021-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多