2017-12-29 22 views
-1

私はnumpyで行列分解アルゴリズムを実装しています。私のコードが長時間実行されていて、Jupyterカーネルが再起動することがわかりました。私はnp.dotを使用している1行のコードにエラーをローカライズしました。ゆっくりと実行されるコードのスニペットは次のとおりです。np.dot実行に非常に時間がかかります

H = np.random.rand(n_features, 8) 
print(H_start.T.shape) #(8, 10285) 
print(t2t_matrix.shape) #(10285, 10285) 
S_nom = H_start.T.dot(t2t_matrix) # this line takes a long time 

アイデアをお持ちですか?私は(10285、10285)行列がそんなに長くかかるとは思わなかったでしょうか?

+1

'H_start'シェイプを印刷しましたが、ドットに' H'を使用しました。 – wim

+0

「非常に長い時間」とは何ですか? – talonmies

+0

非常に長い時間= 1時間以上経過すると、ジュピターノートがクラッシュする。以下の私の答えを見てください。実際には異なるマトリックスタイプを使ってドットプロダクトを実行していました。 – orbital

答えて

0

t2t_matrixは 'scipy.sparse.csc.csc_matrix'で、 H_startは 'numpy.ndarray'でした。私はt2t_matrix.toarray()を使ってt2t_matrixを変換しなければなりませんでした。変換なしでは、ジュピターのノートブックがクラッシュします。

+1

はい、 'dense.dot(スパース)'は正しく動作しません。 'sparse.dot(dense)'は 'sparse * sparse'と同様に問題ありません。しかし、平らな高密度の「ドット」は、まばらなものから濃いものへの素朴な変換を試みています。これは間違っています。 'np.array(t2t_matrix)'と 't2t_matrix.toarray()'を比較してください。 – hpaulj

関連する問題