Функция Matlab NNZ, числовой ноль - PullRequest
2 голосов
/ 21 мая 2019

Я работаю над кодом в контексте восстановления неотрицательного решения наименьших квадратов на Matlab, и мне нужно (без подробностей, потому что это не так важно для этого вопроса) узнать количество ненулевых элементов в моих матрицах и массивах ,

Функция NNZ на matlab делает именно то, что я хочу, но бывает, что мне нужно больше информации о том, что Matlab думает о «нулевом элементе», это может быть сам 0 или числовой ноль, такой как 1e-16 или меньше.

Есть ли у кого-нибудь эта информация о функции NNZ, потому что я не смог получить оригинальный скрипт

Спасибо.

PS: я не эксперт по Matlab, поэтому примите мои извинения, если это действительно простая задача.

Я попытался "открыть nnz" на Matlab, но у меня только небольшой скрипт с комментариями строк кода ...

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Вы можете добавить допуск, выполнив что-то вроде:

nnz(abs(myarray)>tol);

Это создаст двоичный массив, равный 1, когда abs (myarray)> tol, и 0 в противном случае, а затем посчитает число не-ноль записей.

2 голосов
/ 21 мая 2019

Поскольку nnz считает все, что не является точным нулем (т. Е. 1e-100 не равно нулю), вам просто нужно применить оператор отношения к вашим данным сначала, чтобы найти, сколько значений превышает некоторый допуск около нуля.Для матрицы A:

n = nnz(abs(A) > 1e-16);

Кроме того, это обсуждение сравнения с плавающей точкой может представлять интерес для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...