Элементарная мощность матрицы 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
.
Ответы
Ответ 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)