Получение количества хранимых элементов разреженной матрицы - Python - PullRequest
0 голосов
/ 24 августа 2018

Я работаю с большими разреженными матрицами в Python. Представление моей матрицы дает мне количество сохраненных элементов, например

<100000x100000 sparse matrix of type '<type 'numpy.float64'>'
      with 1244024860 stored elements in Compressed Sparse Row format>

У меня такой вопрос: как мне заставить Python вернуть мне число 1244024860? Я хочу использовать это число как приближение к числу ненулевых элементов (хотя некоторые из сохраненных элементы могут быть нулями).

Для меньших матриц я использовал метод sparese_mat.count_nonzero(), но этот метод фактически выполняет вычисления (я полагаю, что он проверяет, что хранимые элементы действительно отличаются от нуля), и поэтому он очень неэффективен для моей большой матрицы.

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Используйте атрибут nnz. Например,

In [80]: a = csr_matrix([[0, 1, 2, 0], [0, 0, 0, 0], [0, 0, 0, 3]])

In [81]: a
Out[81]: 
<3x4 sparse matrix of type '<class 'numpy.int64'>'
    with 3 stored elements in Compressed Sparse Row format>

In [82]: a.nnz
Out[82]: 3

Атрибуты класса csr_matrix описаны в документации csr_matrix (прокрутите вниз, чтобы найти их).

0 голосов
/ 24 августа 2018

Вы искали scipy.sparse.csr_matrix.getnnz.

https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.sparse.csr_matrix.getnnz.html

Количество сохраненных значений, включая явные нули.

...