2017-05-07 12 views
0

私はRichardson-Lucyデコンボリューションアルゴリズムで停止基準described in this paperを実装しようとしています。私のテスト画像は2.2 Mpxです。scipy Pythonでの疎行列の計算

im_deconv = [[]] # Image L channel as a 2D array 
m = 2.2E6 # im_deconv.size 

P_e_ortho = scipy.sparse.identity(m, dtype='int8') - \ 
      1/m * np.ones((m, m), dtype='int8') 

そこで、基本的

estimator = numpy.dot(P_e_ortho, im_deconv.flatten()) 

P_e_orthoは他の場所対角線上1 - 1/m- 1/mを持っている:私は計算する必要があります。

このコードは、メモリエラー(4.8×1012セルが必要です)を返します。計算で正方行列全体を扱うのを避けるにはどうすればよいですか?

対角線を設定するには問題ありませんが、非対角要素を変更するにはどうすればよいですか?見つかっ

答えて

0

ソリューション:

# Construct a Row-based linked list sparse matrix 
P_e_ortho = scipy.sparse.lil_matrix((m, m)) 

P_e_ortho[:, :] = -1/m # Sets all elements 
P_e_ortho.setdiag(1-1/m) # Sets the diagonal 
P_e_ortho = P_e_ortho.tocsr() # Convert to Compressed Sparse Row matrix 

estimator = P_e_ortho.dot(im_deconv.flatten()) # Compute the dot product 
+0

私は、これはあなたのメモリエラーを与えるものではありません驚いています。行列のすべての要素を非ゼロ値に設定しました。合計ストレージは対応する高密度アレイよりも大きくなりますが、いくつかのアレイに分割されます。 '.dot 'ももっと遅くなります。 – hpaulj

+0

@hpauljはい、この問題ではうまくいかず、私はこのアプローチをあきらめました。この論文では、この技術の実装を小さな写真で示していますが、大きなものでは実現不可能です。私は代わりに正規化の要因に切り替えました。しかし、この解決策はまだまばらな行列を構築するのに有効です。 –

関連する問題