1

大きな csr_matrix A がある場合、その列を合計したいのですが、単純 A.sum(axis=0) にこれを行いますよね? 対応する軸の値: 1->行、0->列?

csr_matrix Aの行数と同じ長さの[1 2 3 4 5 4 3 ... 4 2 5]など、リストで指定されたいくつかの重みを持つ列を合計したいときにスタックしました。もっと明確に言うと、各列ベクトルとこの重みベクトルの内積が必要です。Pythonでこれを達成するにはどうすればよいですか?

これは私のコードの一部です:

uniFeature = csr_matrix(uniFeature)
[I,J] = uniFeature.shape
sumfreq = uniFeature.sum(axis=0)
sumratings = []

for j in range(J):
    column = uniFeature.getcol(j)
    column = column.toarray()
    sumtemp = np.dot(ratings,column)
    sumratings.append(sumtemp)

sumfreq = sumfreq.toarray()
average = np.true_divide(sumratings,sumfreq)

(Numpy は np としてインポートされます) 重みベクトル「ratings」があり、プログラムはマトリックス「uniFeature」の各列の平均評価を出力することになっています。

column=uniFeature.getcol(j) を直接評価 (リスト) にドットで打ってみましたが、形式が一致しないというエラーが表示されます。column.toarray() の後は問題ありません。その後、評価をドットで示します。しかし、各列を密な形式に戻すと、疎行列を持つという点が失われ、非常に遅くなるのではないでしょうか? 上記のコードを実行しましたが、結果を表示するには遅すぎます。ベクトルの「評価」をスパース行列の各列に効率的に点在させる方法があるはずです。

前もって感謝します!

4

0 に答える 0