この作業はとてもPythonでスパース行列をスパース行列に追加するには?
import numpy as np
a= np.array([[1,2,3,0,9],[3,2,6,2,7],[0,0,0,8,0],[1,0,0,0,3]])
a + a[1]
出力のようnumpyのに非常に簡単である:
array([[ 4, 4, 9, 2, 16],
[ 6, 4, 12, 4, 14],
[ 3, 2, 6, 10, 7],
[ 4, 2, 6, 2, 10]])
は、ベクトルの大きさが自動的に行列の各列にブロードキャストする方法を参照してください。
しかし、スパース行列については、ディメンションの不一致エラーがあります。
from scipy.sparse import *
a= csr_matrix([[1,2,3,0,9],[3,2,6,2,7],[0,0,0,8,0],[1,0,0,0,3]])
a + a[1]
出力:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-32-74c48fe5106e> in <module>()
2
3 a= csr_matrix([[1,2,3,0,9],[3,2,6,2,7],[0,0,0,8,0],[1,0,0,0,3]])
----> 4 a + a[1]
/opt/anaconda2/lib/python2.7/site-packages/scipy/sparse/compressed.pyc in __add__(self, other)
337 elif isspmatrix(other):
338 if (other.shape != self.shape):
--> 339 raise ValueError("inconsistent shapes")
340
341 return self._binopt(other,'_plus_')
ValueError: inconsistent shapes
ありスパース乗算のための関数であり、(完全にその仕事をしていません)a * a[1]
ため、例えば、a.multiply(a[1])
が、私は追加のための1つを見つけることができませんでした。
スパース行列が新しくなりました。助けてください。
密な表現に変換することは、明らかな(良い)解決策になります。ただし、上記の例はMWEだけです。私たちは構造が僅かしかなくても巨大な行列の場合には、疎な行列に行きます。単一の操作のためにそれらを密な形に変換すると、その目的を破るでしょう(その場合、最初からNumPyに固執する方が良いでしょう)。 –
多分、同じ次元のすべての値が 'a [1]'から来た疎な行列を作ることができます。 –