4

scipy sparse マトリックスを列ごとに反復処理する方法を理解しようとしています。各列の合計を計算してから、その列のメンバーをその合計で重み付けしようとしています。私がやりたいことは基本的に次のとおりです。

for i=0 to #columns
  for j=0 to #rows
    sum=sum+matrix[i,j]
  for j=0to #rows
    matrix[i,j]=matrix[i,j]/sum

例で見たイテレータはすべて、列ごとではなく、一度にマトリックス全体を反復処理します。私がやろうとしていることをする方法はありますか?

4

1 に答える 1

3

Scipy 疎行列sumには、これに使用できる独自の方法があります。例えば:

A=sp.lil_matrix((5,5))
b=1+np.arange(0,5)
A.setdiag(b[:-1],k=1)
A.setdiag(b)


print(A)
  (0, 0)        1.0
  (0, 1)        1.0
  (1, 1)        2.0
  (1, 2)        2.0
  (2, 2)        3.0
  (2, 3)        3.0
  (3, 3)        4.0
  (3, 4)        4.0
  (4, 4)        5.0

f=A.sum(axis=0)

print(f)   
[[1. 3. 5. 7. 9.]]

返される合計は、numpy.matrixスケーリング係数に変換できる密集です。

print(A/f)
[[1.         0.33333333 0.         0.         0.        ]
 [0.         0.66666667 0.4        0.         0.        ]
 [0.         0.         0.6        0.42857143 0.        ]
 [0.         0.         0.         0.57142857 0.44444444]
 [0.         0.         0.         0.         0.55555556]]
于 2012-05-07T08:33:03.527 に答える