Подтвердить что ты не робот

Как проверить MATLAB, если вектор содержит только нули?

Что такое "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

Я получаю сообщение об ошибке:

??? Операнды к || и & & операторы должны быть конвертированы в логические скалярные значения.

4b9b3361

Ответ 1

Используйте all:

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

Ответ 2

Так как нули обрабатываются так же, как false, вам не нужно использовать vector == 0, как предлагает ptomato. ~any(vector) - это "MATLAB-way" для проверки только нулевых значений.

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

Расширяя проблему до массивов, вам нужно будет использовать

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

Ответ 3

Немного поздно, но как насчет nnz (Число не нулей)?

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

Ответ 4

Вы можете легко узнать, если они есть, и сколько записей в vector содержат ненулевые элементы, используя следующее:

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

vector~=0 возвращает массив тех же размеров, что и vector, содержащий нули и единицы, представляющие true и false для данного оператора. Переменная 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