0

numpy ndarray を疎行列に追加しようとしていますが、うまくいきませんでした。疎行列を密行列に変換せずに、そうする方法があるかどうか疑問に思っていました。

別の問題は、2 つの疎行列を追加できるかどうかです。

 x = np.dot(aSparseMatrix, weights)
 y = x + bias

ここで、x は疎行列で、bias は numpy 配列です。現在、発生するエラーは次のとおりです。

NotImplementedError: adding a scalar to a CSC or CSR matrix is not supported

aSparseMatrix.shape (1, 10063)

weights.shape  (10063L, 2L)

bias.shape  (2L,)
4

2 に答える 2

6

さまざまな種類の scipy.sparse 行列があります: csr_matrix は行列代数では高速ですが、更新は遅く、coo_matrix は代数では遅く、更新は高速です。それらはscipy.org/SciPyPackages/Sparseで説明されています。

疎行列が 99 % 0 の場合、sparsematrix + 199 % は 1 -- 密です。 たとえば、後で使用する 場所に
手動で展開できます-短いコードでは可能ですが、面白くありません。
y = dot( x + bias, npvec )
dot( x, npvec ) + bias * npvec
y

試してみるためにIPythonを強くお勧めします。

# add some combinations of scipy.sparse matrices + numpy vecs
# see http://www.scipy.org/SciPyPackages/Sparse

from __future__ import division
import numpy as np
from scipy import sparse as sp

npvec = np.tile( [0,0,0,0,1.], 20 )
Acsr = sp.csr_matrix(npvec)
Acoo = Acsr.tocoo()

for A in (Acsr, Acoo, npvec):
    print "\n%s" % type(A)
    for B in (Acsr, Acoo, npvec):
        print "+ %s = " % type(B) ,
        try:
            AplusB = A + B
            print type(AplusB)
        except StandardError, errmsg:
            print "Error", errmsg
于 2013-01-15T13:23:12.300 に答える
0

numpy ドット積の代わりに、単純な * 製品を使用します。Python がブロードキャストし、正しい結果が得られます。

numpy 内積により、結果の行列のサイズが予想と一致せず、形状が異なる 2 つの行列間で加算を行うことができなかったため、加算は機能しません。

于 2013-01-10T05:07:12.797 に答える