Почему полный массив Matlab (X) возвращает false в 'if X'? - PullRequest
4 голосов
/ 05 ноября 2010

У меня есть некоторый код Matlab, который проверяет, является ли массив ненулевым перед работой, и пропускается ли он, даже если массив равен 3 на 1000+.

Код просто: если X

Массив читается из файла Excel с использованием 'xlsread' и выдает ошибку только для конкретного файла данных, но работает для любого другого файла входных данных, который я использую.

Есть идеи, почему это так?

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010

Для этого теста требуется только один элемент массива с нулевым значением

>> A = rand(100, 3) + 1;
>> if A; disp('True'); else disp('False'); end
True     

>> A(35) = 0;
>> if A; disp('True'); else disp('False'); end
False

Если вы хотите проверить, что массив не содержит только нулей, вы можете использовать ключевое слово any:

>> A = rand(100, 3) + 1;
>> A(35) = 0;
>> if any(A(:)); disp('True'); else disp('False'); end
True

>> A = 0 * A;
>> if any(A(:)); disp('True'); else disp('False'); end
False

Edit:

Извинения, как SCFrench упоминает в комментариях, используйте any(A(:)) для проверки каждого элемента в массиве, а не any(A) - это было должным образом отредактировано в моем ответе выше.

0 голосов
/ 05 ноября 2010

Функция любая не совсем подходит для этой проблемы, поскольку она обрабатывает столбцы матрицы как векторы:

>> any([0 0 1; 0 0 1; 0 0 1])
ans =
     0     0     1

Вместо этого используйте функцию nnz для подсчета количества ненулевых элементов в матрице:

>> nnz([0 0 1; 0 0 1; 0 0 1])
ans =
     3
>> nnz([0 0 0; 0 0 0; 0 0 0])
ans =
     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...