Как проверить в MATLAB, если вектор содержит только нули? - PullRequest
13 голосов
/ 20 мая 2010

Что такое «путь 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

Я получаю ошибку:

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

Ответы [ 5 ]

22 голосов
/ 20 мая 2010

Использование all:

vector = zeros(1,10)
if 1 && all(vector == 0)   %this comparision will work
    'success'
end
14 голосов
/ 20 мая 2010

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

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

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

array = zeros(5);
if 1 && ~any(array(:))
    'success'
end
4 голосов
/ 08 мая 2013

Немного поздно, но как насчет nnz ( Количество ненулевых )?

if 1 && nnz(vector)==0
    'success'
end
1 голос
/ 08 мая 2013

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

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

vector~=0 возвращает массив тех же измерений, что и vector, содержащий нули и единицы, представляющие истину и ложь, для данного оператора. Затем переменная nrNonZero содержит количество ненулевых элементов в vector.

Итак, ваш код будет

if (sum(vector~=0) == 0)
    'success'
end
0 голосов
/ 20 мая 2013

Вы также можете сделать это, используя:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...