Как удалить нулевые элементы в csr_matrix?

#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, и это не так дорого, как я думал. Большое вам спасибо.