web-dev-qa-db-ja.com

配列をラスターイメージとしてpython

Python=に数の多い配列があり、それをラスターイメージとして画面に表示したいのですが、これを行う最も簡単な方法は何ですか?特に派手であるか、Niceインターフェイスがある場合、必要なのは、グレースケールラスターイメージとして配列の内容を表示することだけです。

私はIDLコードの一部をNumPyでPython=に移行しようとしています。基本的に、IDLのtvおよびtvsclコマンドの代わりを探しています。

22
robintw

必要に応じて、 matplotlibのimshow または glumpy がおそらく最良のオプションです。

Matplotlibは無限に柔軟性がありますが、速度は遅くなります(matplotlibのアニメーションは、すべてを正しく行っていても、驚くほどリソースを大量に消費する可能性があります)。しかし、あなたはあなたの処分で本当に素晴らしい、フル機能のプロッティングライブラリを持っているでしょう。

Glumpyは、2D numpy配列の迅速なopenGLベースの表示とアニメーションに完全に適していますが、その機能ははるかに制限されています。ただし、一連の画像をアニメーション化したり、データをリアルタイムで表示したりする必要がある場合は、matplotlibよりもはるかに優れたオプションです。

Matplotlibの使用(pylabの代わりにpyplot APIを使用):

import matplotlib.pyplot as plt
import numpy as np

# Generate some data...
x, y = np.meshgrid(np.linspace(-2,2,200), np.linspace(-2,2,200))
x, y = x - x.mean(), y - y.mean()
z = x * np.exp(-x**2 - y**2)

# Plot the grid
plt.imshow(z)
plt.gray()
plt.show()

不機嫌な使い方:

import glumpy
import numpy as np

# Generate some data...
x, y = np.meshgrid(np.linspace(-2,2,200), np.linspace(-2,2,200))
x, y = x - x.mean(), y - y.mean()
z = x * np.exp(-x**2 - y**2)

window = glumpy.Window(512, 512)
im = glumpy.Image(z.astype(np.float32), cmap=glumpy.colormap.Grey)

@window.event
def on_draw():
    im.blit(0, 0, window.width, window.height)
window.mainloop()
31
Joe Kington

Pylabインタラクティブモードでipythonを使用すると、次のことができます。

$ ipython pylab
In [1]: imshow(your_array)

pylabモードではないか:

$ ipython
In [1]: from pylab import *
In [2]: imshow(your_array)
In [3]: pylab.show()

またはpylab名前空間なしで:

$ ipython
In [1]: import matplotlib.pyplot as pyplot
In [2]: pyplot.imshow(your_array)
In [3]: pyplot.show()
6
Thomas

簡単な追加:matplotlibで表示する場合、画像を「ラスター」で表示する、つまり平滑化せずにピクセル化する場合は、imshowの呼び出しに内挿オプション 'nearest'を含める必要があります。

2
mdurant