Отображать массив NumPy как постоянное обновление изображения с помощью Glumpy

У меня есть симуляционная модель, работающая на Python с использованием NumPy и SciPy, и она создает 2D-массив NumPy в качестве выхода каждой итерации. Я выводил этот вывод как изображение, используя matplotlib и функцию imshow. Тем не менее, я узнал о Glumpy, и на его странице документации говорится:

Благодаря оболочке IPython, glumpy можно запускать в интерактивном режиме, где вы можете получать живое обновление в отображаемых массивах при изменении их содержимого.

Однако я не могу понять, как это сделать с примерами, которые они дали. В основном моя модель работает как одна функция, у которой есть большой цикл для цикла для цикла для числа итераций, которые я запускаю. В конце каждой итерации цикла for я хочу отобразить массив. На данный момент я использую matplotlib для сохранения изображения в png-файле, так как отображение его на экране через matplotlib, похоже, затормозит процесс python.

Я уверен, что есть способ сделать это с помощью Glumpy, я просто не знаю, как это сделать, и я не могу найти полезные уроки.

  • Python urllib2 возвращает пустую строку
  • Как создать несколько объектов класса с помощью цикла в python?
  • Укажите правильные типы данных, используя pandas.read_csv
  • манипулирование файлами и поиск слова и сложная замена
  • Как проверить, является ли каталог вспомогательной директорией другого каталога
  • Вычисление доверительного интервала из данных выборки
  • Получить длину или продолжительность файла .wav
  • pip install - locale.Error: неподдерживаемая настройка локали
  • One Solution collect form web for “Отображать массив NumPy как постоянное обновление изображения с помощью Glumpy”

    Документация Glumpy довольно несущественна! Вот пример простой симуляции, сравнивающей визуализацию массива с glumpy против matplotlib :

     import numpy as np import glumpy from OpenGL import GLUT as glut from time import time from matplotlib.pyplot import subplots,close from matplotlib import cm def randomwalk(dims=(256,256),n=3,sigma=10,alpha=0.95,seed=1): """ A simple random walk with memory """ M = np.zeros(dims,dtype=np.float32) r,c = dims gen = np.random.RandomState(seed) pos = gen.rand(2,n)*((r,),(c,)) old_delta = gen.randn(2,n)*sigma while 1: delta = (1.-alpha)*gen.randn(2,n)*sigma + alpha*old_delta pos += delta for ri,ci in pos.T: if not (0. <= ri < r) : ri = abs(ri % r) if not (0. <= ci < c) : ci = abs(ci % c) M[ri,ci] += 1 old_delta = delta yield M def mplrun(niter=1000): """ Visualise the simulation using matplotlib, using blit for improved speed""" fig,ax = subplots(1,1) rw = randomwalk() im = ax.imshow(rw.next(),interpolation='nearest',cmap=cm.hot,animated=True) fig.canvas.draw() background = fig.canvas.copy_from_bbox(ax.bbox) # cache the background tic = time() for ii in xrange(niter): im.set_data(rw.next()) # update the image data fig.canvas.restore_region(background) # restore background ax.draw_artist(im) # redraw the image fig.canvas.blit(ax.bbox) # redraw the axes rectangle close(fig) print "Matplotlib average FPS: %.2f" %(niter/(time()-tic)) def gprun(niter=1000): """ Visualise the same simulation using Glumpy """ rw = randomwalk() M = rw.next() # create a glumpy figure fig = glumpy.figure((512,512)) # the Image.data attribute is a referenced copy of M - when M # changes, the image data also gets updated im = glumpy.image.Image(M,colormap=glumpy.colormap.Hot) @fig.event def on_draw(): """ called in the simulation loop, and also when the figure is resized """ fig.clear() im.update() im.draw( x=0, y=0, z=0, width=fig.width, height=fig.height ) tic = time() for ii in xrange(niter): M = rw.next() # update the array glut.glutMainLoopEvent() # dispatch queued window events on_draw() # update the image in the back buffer glut.glutSwapBuffers() # swap the buffers so image is displayed fig.window.hide() print "Glumpy average FPS: %.2f" %(niter/(time()-tic)) if __name__ == "__main__": mplrun() gprun() 

    Использование matplotlib с GTKAgg качестве моего backend и использование blit чтобы избежать рисования фона каждый раз, я могу нанести около 95 FPS. С Glumpy я получаю около 250-300 FPS, хотя в настоящее время я довольно дерьмовая графика на моем ноутбуке. Сказав это, Glumpy немного более запутанно, чтобы работать, и если вы не имеете дело с огромными матрицами или вам нужна очень высокая частота кадров по какой-либо причине, я бы придерживался использования matplotlib с matplotlib .

    Python - лучший язык программирования в мире.