如何在MATLAB中检查向量是否只包含零?
什么是“MATLAB方法”来检查向量是否只包含零,以便将其计算为标量而不是向量。如果我运行此代码:如何在MATLAB中检查向量是否只包含零?,matlab,Matlab,什么是“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 我得到一个错误: ???| |和的操作数&& 操作员必须可转换为 逻辑标量值 使用全部: ve
vector = zeros(1,10)
%the "1" represents a function that returns a scalar
if 1 && vector == 0 %this comparision won't work
'success'
end
我得到一个错误:
???| |和的操作数&&
操作员必须可转换为
逻辑标量值
使用全部
:
vector = zeros(1,10)
if 1 && all(vector == 0) %this comparision will work
'success'
end
由于零的处理方式与
false
相同,因此不需要像建议的那样使用vector==0
<代码>~任意(向量)是只检查零值的“MATLAB方法”
if 1 && ~any(vector)
'success'
end
如果将问题扩展到阵列,则必须使用
array = zeros(5);
if 1 && ~any(array(:))
'success'
end
您可以通过以下方法轻松找到
vector
中是否有以及有多少项包含非零元素:
vector = zeros(1, 10);
nrNonZero = sum(vector~=0)
vector~=0
为给定语句返回一个与vector
维数相同的数组,其中包含0和1,表示true和false。然后变量nrNonZero
包含向量中非零元素的数量
那么,您的代码将是
if (sum(vector~=0) == 0)
'success'
end
有点晚了,但是nnz
()怎么样
您也可以使用以下方法执行此操作:
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
需要注意的是,您不需要1&&
。它没有任何用途。@gnovice:我实际上没有1
,而是一个返回标量的函数。@Lucas:哦,好的。现在这是有道理的。我会在代码中加一个占位符,比如some\u fcn(…)&&
,让它更清楚一点。@gnovice:你说得对。我编辑了我的问题,但不想删除1
,否则答案看起来会很奇怪。如果我没有逻辑操作数,那么问题就不存在。您得到的错误是因为在标量和向量之间使用了&&
运算符。要比较大小相等的向量,请使用&
运算符获取逻辑数组。否则,必须使用另一个函数,如any
或all
,将向量减少为单个标量。
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