#python #scipy #sparse-matrix
#python #scipy #разреженная матрица
Вопрос:
Я выполняю некоторые вычисления разреженной матрицы с помощью python, используя csr_matrix из scipy.sparse. Будет создано много нулевых элементов, сохраненных как 0.0. Как я могу удалить эти элементы, чтобы сэкономить использование памяти?
Я пробовал функцию ‘eliminate_zeros’, но она не работает.
Когда я печатаю разреженную матрицу, первые несколько элементов являются:
(0, 0) 5.0
(0, 1) -1.05
(1, 0) -1.05
(1, 1) 2.0
(0, 2) -1.05
(0, 3) 0.0
(1, 2) 0.0
Значение 0.0 получается из расчета 0,5-0,5.
Комментарии:
1. Почему вы хотите это сделать? Сохранение данных в разреженном формате особенно полезно, когда в основном нулевые записи, или, как следует из названия, матрица разреженная
2. Попробуйте
M.data==0
проверить, действительно ли те 0, которые вы видите, равны нулю. Тестирование с плавающей запятой точно для 0 может быть сложным.3. Чтобы добавить к моему комментарию,
eliminate_zeros
работает только со значениями, равными ровно 0; не только с теми, которые близки. Возможно, вам потребуется сначала изменитьM.data
значения, чтобы найти близкие (с некоторым допуском) и установить для них значение 0. Не рассчитывайте, что вычитание с плавающей запятой сделает это за вас.4. @yatu Матрица большая (в идеале я хочу, чтобы она была 2 ^ 20 * 2 ^ 20) и разреженная (большинство элементов равно 0, как вы упомянули).
5. @hpaulj Да, это работает, если я устанавливаю для них значение 0, и это не так дорого, как я думал. Большое вам спасибо.