3

疎行列 X がある場合:

>> print type(X)
<class 'scipy.sparse.csr.csr_matrix'>

...各行の各要素の二乗を合計して、リストに保存するにはどうすればよいですか? 例えば:

>>print X.todense()
[[0 2 0 2]
 [0 2 0 1]]

これを各行の二乗和のリストにするにはどうすればよいでしょうか。

[[0²+2²+0²+2²]
 [0²+2²+0²+1²]]

また: [8, 5]

4

1 に答える 1

7

まず第一に、csr マトリックスには.sumうまく機能するメソッド (内積に依存する) があるため、必要なのは 2 乗です。最も簡単な解決策は、疎行列のコピーを作成し、そのデータを二乗してから合計することです。

squared_X = X.copy()
# now square the data in squared_X
squared_X.data **= 2

# and sum each row:
squared_sum = squared_X.sum(1)
# and delete the squared_X:
del squared_X

.data本当にスペースを節約する必要がある場合は、交換してから元に戻すことができると思います。

X.sum_duplicate() # make sure, not sure if this happens with normal usage.
old_data = X.data.copy()
X.data **= 2
squared_sum = X.sum(1)
X.data = old_data

編集:csr行列には.multiply要素ごとの乗算の方法があるため、実際には別の良い方法があります:

squared_sum = X.multiply(X).sum(1)

追加: したがって、すべての非ゼロ要素の値を格納する whichにアクセスすることにより、要素ごとの操作が簡単に実行されます。注:必要かもしれませんが、どのような操作で必要になるかはわかりません。csr.data.sum_duplicates()

于 2012-09-02T16:23:44.377 に答える