2017-12-11 5 views
0

かなり大きな2次元データセットのカーネル密度の見積もりをcolour the points in a scatter plotに計算しようとしています。関数scipy.stats.gaussian_kdeは時間がかかりますので、結果を速く得るためにdask(v0.15.2)を使うことができると思いました。しかし、私のアプローチが実際にスピードアップしているかどうかは分かりません。dask.bag.from_sequenceを使用してカーネル密度の見積もりを計算する

import numpy as np 
from scipy.stats import gaussian_kde 
import dask.bag as db 

xy = np.random.rand(2, 1000000) 
kde = gaussian_kde(xy) 

chunker = (xy[:, i:i+10000] for i in range(100)) 

compute_job = db.from_sequence(chunker).map(kde) 

results = compute_job.compute() 
z = np.hstack(results) 

これは2677920座標ペアのデータセットにクアッドコアXeonプロセッサE5-2609 @ 2.4Hzに完了するために60hrsを引き継ぐ:ここでは一例です。私は正しくdaskを使用していますか?

答えて

0

残念ながら、Daskではすべてのケースでスピードアップが提供されていません。実際、入力チャンクの1つのみでKDEを実行すると、既に複数のコアが使用されていることがわかります.Daskには余裕がありません。

カーネルサイズが2x1000000のKDE(畳み込みのような)をするのは賢明ではないようですが、それは非常に時間がかかることには驚かないのです。これがあなたがしたいことだと確信していますか?

さらに、datashaderを使用することをお勧めします。これは、Dask配列でチャンク単位で動作し、素晴らしいブラーリングパイプライン要素を含んでいます。

+0

ご返信ありがとうございます。私がKDEを計算したいのは、散布図に色を付けることです。私はdatashaderを使用しますが、[残念ながらmatplotlibではまだ完全にはサポートされていません](https://github.com/bokeh/datashader/pull/200)。 – Pablo

+0

私はあなたが何らかのKDEを望んでいるのではないかと疑問を呈しています。私はあなたがあなたのデータチャンクよりもはるかに大きなカーネルでそれを計算したいと思っています。基本的には、ぼかし付きの[hexbin](https://matplotlib.org/examples/pylab_examples/hexbin_demo.html)のみを実行しています。 – mdurant

+0

私は[レシピ](https://stackoverflow.com/a/20107592/1534504)に従うだけで、基本的な統計情報をほとんど理解していないことを認めなければなりません。私は同意する、hexbinはこのデータ量のより適切な解決策である。ガイダンスをありがとう。 – Pablo

関連する問題