2011-09-19 16 views
8

カラースケールに対応する値で2D配列(約1000x1000)をプロットしたいとします。だから私はmatplotlib.pcolorを使用しましたが、それは何らかの理由でそれが(2分程度のように)プロットするような次元になると遅くなります。その理由は何ですか?浮動小数値をint16に変換すると助けになるでしょうか? pcolorの代替手段はありますか?matplotlib.pcolor非常に遅いです。代替案?

from pylab import * 

data=genfromtxt('data.txt',autostrip=True, case_sensitive=True) 
pcolor(data,cmap='hot') 
colorbar() 
show() 

data.txtに配列が含まれています。読み込みプロセスには数秒かかりますが、主な計算時間はpcolor()とshow()関数の両方で確実に使用されます(おおよそそれぞれ60〜90秒です)。

+0

コードを表示できますか? – Louis

+4

おそらく必要なのはpyplot.imshow()ですか? – steabert

+0

うん、これははるかに良い作品、ありがとう! – Jakob

答えて

9

imshowははるかに速くなります。 pcolorはPolyCollectionを返します。PolyCollectionは、100万の要素ではかなり遅くなりますが、imshowは単なる画像です。

pcolorのインデックスはimshowと少し異なりますが、pcolorの使い方によっては気にする必要はありません。また、pcolorからimshowに行くときに、imshowでinterpolation="nearest"を設定することもよくあります(ただし、このような大きな画像の場合はどちらでも問題ありません)。

9

将来のgooglerのメモとして、pcolormeshpcolorfastもあります。

pcolormesh状態のドキュメント:

pcolormesh)は(pcolorのと同様であるが、異なるメカニズムを使用し が異なるオブジェクトを返します。 pcolorはPolyCollectionを返しますが、 pcolormeshはQuadMeshを返します。はるかに高速ですので、大規模な配列では常にほとんど が優先されます。

imshowはさらに高速である必要がありますが、非直線的な軸。

pcolorpcolormeshimshowの間の素晴らしい比較については、this pageを参照してください。

+2

pcolor、pcolormesh、imshow、pcolorfastの4つの可能性のすべてを比較するため、http://matplotlib.org/examples/pylab_examples/pcolor_demo.htmlも参照してください。 – kadee