我一直在研究python中的程序,该程序通过生成所有帧并使用ffmpeg
组合它们来对Mandelbrot集进行缩放。
为了生成所述帧,我使用了三个矩阵,每个矩阵分别存储r,g,b值,然后将它们与np.dstack((r,g,b))
组合在一起,并使用{{1 }}。
这是我创建RGB矩阵的方式:
PIL.Image
因此,首先定义一些有用的变量(图像宽度/高度,坐标中像素的大小,迭代次数),然后逐个值修改每个矩阵值。 现在,该系统尚未经过优化,运行速度很慢,因此我想看看是否有可能生成已经包含我想在分形计算中节省一些时间的三个矩阵。
因此,我尝试查看是否可以像这样用def fract(self,xmin,xmax,ymin,ymax,iters):
width = self.data['width']
height = self.data['height']
xpix = (xmax-xmin)/width
ypix = (ymax-ymin)/height
r,g,b = [np.zeros((height,width),dtype=np.int8) for i in range(3)]
for x in range(width):
for y in range(height):
r[y,x] = self.color(self.mandelbrot(xmin+(x*xpix),ymin+(y*ypix),iters),iters,0)
g[y,x] = self.color(self.mandelbrot(xmin+(x*xpix),ymin+(y*ypix),iters),iters,1)
b[y,x] = self.color(self.mandelbrot(xmin+(x*xpix),ymin+(y*ypix),iters),iters,2)
self.im = np.dstack((r,g,b))
生成r
:
np.fromfunction
但是当我这样做时,结果证明矩阵不相等。与我本应得到的值相比,大多数计算值均不正确。
我使用矢量化或r = np.fromfunction(np.vectorize(lambda i,j: self.color(self.mandelbrot(xmin+(j*xpix),ymin+(i*ypix),iters),iters,0)),(height,width),dtype=np.int8)
的整体方式是否有问题?
这里还有fromfunction
和color
函数
mandelbrot
#Calculates color depending on Mandelbrot iterations
#n = iteration
#iters = max iter
#col = color (0 = red, 1 = green, 2 = blue)
def color(self,n,iters,col):
if n in [0,iters]: return (0,0,0)[col]
return self.palette[n%len(self.palette)][col]