Подтвердить что ты не робот

Элементарная мощность матрицы scipy.sparse

Как поднять матрицу scipy.sparse до уровня власти, по элементам? numpy.power должен, согласно его руководство, сделать это, но он не работает на разреженных матрицах:

>>> X
<1353x32100 sparse matrix of type '<type 'numpy.float64'>'
        with 144875 stored elements in Compressed Sparse Row format>

>>> np.power(X, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".../scipy/sparse/base.py", line 347, in __pow__
    raise TypeError('matrix is not square')
TypeError: matrix is not square

Такая же проблема с X**2. Преобразование в плотный массив работает, но тратит драгоценные секунды.

У меня была та же проблема с np.multiply, которую я решил использовать с использованием метода разреженной матрицы multiply, но, похоже, не существует метода pow.

4b9b3361

Ответ 1

Это немного низкоуровневый, но для элементарных операций вы можете напрямую работать с базовым массивом данных:

>>> import scipy.sparse
>>> X = scipy.sparse.rand(1000,1000, density=0.003)
>>> X = scipy.sparse.csr_matrix(X)
>>> Y = X.copy()
>>> Y.data **= 3
>>> 
>>> abs((X.toarray()**3-Y.toarray())).max()
0.0

Ответ 2

Я столкнулся с одним и тем же вопросом и обнаружил, что разреженная матрица теперь поддерживает элементную силу. В приведенном выше случае это должно быть:

 X.power(2)