2
numpy
の配列Z
の形は(k,N)
で、第2の配列X
の形は(N,n)
です。疎なscipy行列での放送の使用
H = Z.reshape((1, k, N)) * X.T.reshape((n, 1, N))
これは正常に動作し、驚くほど速いです:
numpy
放送を使用して、私は簡単にそのスライス行X
の列を掛けてきた配列Z
ある形状(n,k,N)
で新しい配列H
を得ることができます。 今、X
は非常にまばらです。この操作をスパース行列操作を使用してさらに高速化したいと考えています。私は、次の操作を実行する場合
は、しかし:
import scipy.sparse as sprs
spX = sprs.csr_matrix(X)
H = (Z.reshape((1,k,N))*spX.T.reshape((n,1,N))).dot(Z.T)
私は次のエラーを取得する:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Python27\lib\site-packages\scipy\sparse\base.py", line 126, in reshape
self.__class__.__name__)
NotImplementedError: Reshaping not implemented for csc_matrix.
は、スパースscipy
行列で放送を使用する方法はありますか?
2dの制限に加えて、疎な数学は他の疎な行列でしか動作しません。密な配列で作業する場合、疎な行列は密な行列に変換されます。様々な数学演算で何が起こるかを見るには 'spX'を使いましょう。 – hpaulj