Ответ 1
Используйте all
:
vector = zeros(1,10)
if 1 && all(vector == 0) %this comparision will work
'success'
end
Что такое "MATLAB-way", чтобы проверить, содержит ли вектор только нули, так что он будет оцениваться скаляром, а не вектором. Если я запустил этот код:
vector = zeros(1,10)
%the "1" represents a function that returns a scalar
if 1 && vector == 0 %this comparision won't work
'success'
end
Я получаю сообщение об ошибке:
??? Операнды к || и & & операторы должны быть конвертированы в логические скалярные значения.
Используйте all
:
vector = zeros(1,10)
if 1 && all(vector == 0) %this comparision will work
'success'
end
Так как нули обрабатываются так же, как false
, вам не нужно использовать vector == 0
, как предлагает ptomato. ~any(vector)
- это "MATLAB-way" для проверки только нулевых значений.
if 1 && ~any(vector)
'success'
end
Расширяя проблему до массивов, вам нужно будет использовать
array = zeros(5);
if 1 && ~any(array(:))
'success'
end
Немного поздно, но как насчет nnz
(Число не нулей)?
if 1 && nnz(vector)==0
'success'
end
Вы можете легко узнать, если они есть, и сколько записей в vector
содержат ненулевые элементы, используя следующее:
vector = zeros(1, 10);
nrNonZero = sum(vector~=0)
vector~=0
возвращает массив тех же размеров, что и vector
, содержащий нули и единицы, представляющие true и false для данного оператора. Переменная nrNonZero
затем содержит число ненулевых элементов в vector
.
Итак, ваш код будет
if (sum(vector~=0) == 0)
'success'
end
Вы также можете сделать это, используя следующее:
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