Как я могу проверить подматрицы матрицы, чтобы увидеть, содержат ли они все нули? - PullRequest
0 голосов
/ 04 февраля 2011

У меня большая матрица, скажем, A[1,10,10000], которая содержит 10000 подматриц 1 на 10.Я хочу проверить каждую из этих подматриц, чтобы найти, какие из них содержат все нули.Как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 04 февраля 2011

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

allZeroIndex = squeeze(all(all(A == 0,2),1));

И это даст вам логический вектор allZeroIndex, которая имеет ту же длину, что и третье измерение A и содержит 1 (т. Е. Истина) для матриц, которые имеют все нули, и 0 (т. Е. Ложь) для матриц, которые содержат ненулевые значения.
ПРИМЕЧАНИЕ: Конечно, вышеприведенное действительно подходит только для матрицы целочисленных значений.Если есть вероятность, что у вас будут значения с плавающей запятой в A, то есть вероятность, что вы никогда не получите в точности 0 для значения.В таком случае вам нужно проверить значения, которые находятся в пределах некоторого порога 0, например:

allNearZeroIndex = squeeze(all(all(abs(A) < 1e-10,2),1));
2 голосов
/ 05 февраля 2011

Простой ответ - использовать nnz.

if nnz(A) == 0
  disp('Yup, this is one really boring matrix.')
end
0 голосов
/ 06 февраля 2011

Я думаю, что использование nnz, вероятно, лучшая ставка, но я не знал об этом до сих пор.Вместо этого я бы использовал unique (): если unique (A) == 0 ...

0 голосов
/ 04 февраля 2011

Вместо all вы также можете использовать sum:

allZero = sum(sum(A==0)); % will be non-zero if there are non-zero values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...