前提・実現したいこと
matplotlibのscatterで126012601260の3次元配列を可視化したい。
3次元配列を等間隔にプロットし、値をヒートマップで表示したい。
発生している問題・エラーメッセージ
15GB(126012601260,double型)の配列をax.scatterで3次元プロットしようとしたところ、以下のエラーメッセージが出ました。
numpy.core._exceptions.MemoryError: Unable to allocate 29.8 GiB for an array with shape (2000376000, 2) and data type float64
該当のソースコード
Python
1f = open(filename,mode='rb') 2AR = np.fromfile(f,np.double,count=int(nx*ny*nz)).reshape(int(nx),int(ny),int(nz)) 3X,Y,Z = np.meshgrid(range(nx),range(ny),range(nz)) 4 5fig = plt.figure(figsize=(12,12)) 6ax = fig.add_subplot(111,projection='3d') 7im = ax.scatter(X,Y,Z,c=AR,cmap=custom_jet,vmin=imin,vmax=imax)
試したこと
データ点数を各辺4分の1(315315315)にすると、エラーは無くなりました。
ハード的には充分なメモリがあるため、ライブラリに原因があると考えています。
3次元配列をfloat16に変換してから、scatterに突っ込んでも同様のエラーが出ました。
補足情報(FW/ツールのバージョンなど)
原因と解決法が分かる方がいましたら、よろしくお願いします。
matplotlibでないといけない理由はないため、他の方法が分かる方でもお願いします。