0

かなり大きなデータセットのPythonでhexbinプロットを作成しようとしています。データを含む2つの配列は、3500万エントリの長さです。ただし、それらは1.5 GBのメモリしか使用せず、4GBを超えるメモリを使用できます。Hexbinはメモリエラーで失敗します。

*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
File "plotmodel.py", line 20, in <module>
plt.hexbin(d,t,m, bins='log', gridsize=20, xscale='log', lw=1, edgecolors='black',    alpha=0.8, cmap=plt.cm.jet)
File "/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/pyplot.py", line 2142, in hexbin
ret = ax.hexbin(x, y, C, gridsize, bins, xscale, yscale, extent, cmap, norm, vmin, vmax, alpha, linewidths, edgecolors, reduce_C_function, mincnt, marginals, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/axes.py", line 6035, in hexbin
iy2 = np.floor(y).astype(int)
MemoryError

hexbinが大きなデータセットで機能しない根本的な理由はありますか、それともハードウェアの制限によるエラーですか?

4

1 に答える 1

2

入力データと同じサイズのshexbinがいくつか作成されているように見えます(大まかに数えると8になりました!)。これについて基本的なことは何もありません、それはこのように書かれています、それはベクトル化の速度をから得るために行われます。np.ndarraynumpy

hexbinmplから取り出して、3つの部分に分割することをお勧めします。最初の部分は、hexarrayの詳細を設定し、2番目の部分は、データをaccum配列に追加し(データをチャンクで処理できるようにするため)、3番目の部分です。これはaccum、実際にプロットを作成するための最初の部分の出力を取ります。

于 2013-02-28T16:06:32.730 に答える