0

私はしばらくの間 Python を学んでいますが、Scipy は私が試している新しいものです。したがって、これを実装している間、私は立ち往生しています:

私はこのコードを持っています、

data_mat = sparse.lil_matrix((500, 11000))

for i_i in range(0, totalcols):
    for j, data  in enumerate(data_mat):
        dw[i_i] = dw[i_i] + (data_mat[j, i_i] * (data_mat[j, totalcols] - prob[j]))

ここ、

dw[totalcols]  #is a list containing 11000 entries initialized to 0

このコードが行うことは、data_mat 列ごとに反復し、列ごとに行ごとに値を取得し、いくつかの計算を行うことです。

例:

1,0,o,...........,1,0,0
0,1,1,...........,0,1,1
.......................
.......................
1,0,0,............0,0,0

疎行列: 500 X 11000 エントリの data_mat

私はこれを達成することができますが、計算を行うのに10分以上かかるなど、プログラムが長すぎます。

これを実装するより良い方法はありますか??

4

2 に答える 2

0

dw計算をベクトル化する必要があります。data_mat[j, totalcols]本当に意味があると仮定すると、 の最後の列を使用しdata_matprob(500,1)配列 (必要に応じて形状を変更) である場合、次のように動作するはずです。

dw = (data_mat.multiply(data_mat[:,-1]-prob)).sum(axis=0)

適切にテストするための現実的なデータはありませんが、データ形状は機能しているようです。

大きなサイズで作業する前に、最初に小さな密な(疎ではない)配列で動作させ、次に小さな疎な配列で動作させることをお勧めします。

于 2013-10-12T04:29:25.617 に答える