Я учусь использовать Scipy.sparse. Первым делом я попробовал проверить диагональную матрицу на разреженность. Однако Сципи утверждает, что это не редкость. Это правильное поведение?

Следующий код возвращает False:

import numpy as np
import scipy.sparse as sps
A = np.diag(range(1000))
print sps.issparse(A)
3
P.Escondido 11 Фев 2014 в 08:34

1 ответ

Лучший ответ

issparse не проверяет, имеет ли матрица плотность меньше некоторого произвольного числа, а проверяет, является ли аргумент экземпляром spmatrix.

np.diag(range(1000)) возвращает стандартный ndarray:

>>> type(A)
<type 'numpy.ndarray'>

Сделать из него разреженную матрицу можно несколькими способами. Выбор одного наугад:

>>> sps.coo_matrix(A)
<1000x1000 sparse matrix of type '<type 'numpy.int32'>'
    with 999 stored elements in COOrdinate format>
>>> m = sps.coo_matrix(A)
>>> sps.issparse(m)
True

Но опять же, обратите внимание, что issparse не заботится о плотности объекта, а только о том, является ли он экземпляром определенного типа разреженной матрицы. Например:

>>> m2 = sps.coo_matrix(np.ones((1000,1000)))
>>> m2
<1000x1000 sparse matrix of type '<type 'numpy.float64'>'
    with 1000000 stored elements in COOrdinate format>
>>> sps.issparse(m2)
True
5
DSM 11 Фев 2014 в 08:57