Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中检查向量是否只包含零?_Matlab - Fatal编程技术网

如何在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

什么是“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
我得到一个错误:

???| |和的操作数&& 操作员必须可转换为 逻辑标量值

使用
全部

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