2016-12-21 9 views
2

メソッドをthunder(Sparkを使用)から同等のnumpyバージョンに変換してdaskを評価しようとしていますが、dask/distributedを使用してこれを書く方法がわかりません。NumPyからDaskへの相関係数関数の変換

は雷では、私は、画像のスタックを取ることができますシリーズに変換し、いくつかの信号に対して相関:

imgs = thunder.images.fromrandom((10, 900, 900)) 
series = imgs.toseries() 
signal = series[5, 5, :] 
correlated = series.correlate(signal) 

numpyのバージョンは次のようになります。

series = numpy.random.rand(900, 900, 10) 
signal = series[5, 5, :] 

reshaped = series.reshape(900 * 900, 10) 

correlated = numpy.asarray(
    map(lambda x: numpy.corrcoef(x, signal)[0, 1], reshaped)) 
) 
final = correlated.reshape(900, 900) 

私は」これを特に配布用に変換する方法に関するヒントを探しています。

答えて

1

おそらく次のようなものでしょうか?

import dask.array as da 
import numpy as np 

imgs = da.random.random((10, 900, 900), chunks=(1, 900, 900)) 
reshaped = imgs.reshape((10, 900 * 900)) 

あなたは

result = da.corrcoef(reshaped) 
result.compute() 

またはいくつかの他の信号

signal = np.random.random(900 * 900) 
result = reshaped.map_blocks(np.corrcoef, signal, dtype=signal.dtype) 
result.compute() 

に対してお互いにあなたのイメージを相関したい場合はしかし、私はあなたのアプリケーションに精通していないよ、そう上記の応答に欠陥がある可能性があります。

+0

はい、ありがとうございます、今すぐご覧ください! しかし、スレッドモードで実行している 'result.compute()'を呼び出すと、 'MemoryError'が発生します。私はちょうど確かめるためにこれを別の箱に再現しようとします。 – Mark

+0

'da.corrcoef'のケースではメモリエラーに驚かれることはありません(低メモリでこの操作を行うのは難しい)。私は、2番目のケースでは、メモリエラーを期待しません。あなたはディスクに流出したい場合は、分散スケジューラを試すことができます:http://dask.pydata.org/en/latest/scheduler-choice.html – MRocklin

+0

私は唯一の方法は私がメモリのエラーが出ていると思うあなたの例は次元を反転しました...私は、900x900である10枚の画像から始まり、次にサイズ(900,900,10)の時系列にフリップする必要があります。そのために、私は 'chunk = 900'で' imgs'を開始しました。私の 'reshaped'は' chunkksize =(810000,10) 'になりました。上記の最後のブロックである信号との相関関係だけを必要としますが、正しいチャンクサイズを把握することはできません。 – Mark

関連する問題