我有一个快速动画的程序,它在pygame下运行得很好,而且由于技术原因,我需要使用matplotlib或其他普遍的模块来做同样的事情.
程序结构大致如下:
pygame.init()
SURF = pygame.display.set_mode((500, 500))
arr = pygame.surfarray.pixels2d(SURF) # a view for numpy, as a 2D array
while ok:
# modify some pixels of arr
pygame.display.flip()
pygame.quit()
Run Code Online (Sandbox Code Playgroud)
我没有低级别的matplotlib经验,但我认为可以用matplotlib做同等的事情.换一种说法 :
如何共享图形的位图,修改一些像素并刷新屏幕?
这是一个最小的工作例子,它在我的计算机上翻转250帧/秒(超过屏幕......):
import pygame,numpy,time
pygame.init()
size=(400,400)
SURF = pygame.display.set_mode(size)
arr = pygame.surfarray.pixels2d(SURF) # buffer pour numpy
t0=time.clock()
for counter in range(1000):
arr[:]=numpy.random.randint(0,0xfffff,size)
pygame.display.flip()
pygame.quit()
print(counter/(time.clock()-t0))
Run Code Online (Sandbox Code Playgroud)
编辑
我在答案中尝试了指示:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
def f(x, y):
return np.sin(x) + np.cos(y) …
Run Code Online (Sandbox Code Playgroud) 我不明白为什么还没有进行如此基本的优化:
In [1]: %timeit np.ones(10**6).any()
100 loops, best of 3: 7.32 ms per loop
In [2]: %timeit np.ones(10**7).any()
10 loops, best of 3: 59.7 ms per loop
Run Code Online (Sandbox Code Playgroud)
即使结论是第一项的证据,也扫描整个阵列.