有没有什么好的方法可以在mathplotlib中将复数的二维数组绘制成图像?
将复数的幅值Map为“亮度”或“饱和度”以及将相位Map为“色调”是非常有意义的(无论如何,色调就是RBG颜色空间中的相位)。http://en.wikipedia.org/wiki/HSL_and_HSV
但据我所知imshow只接受标量值,然后使用一些色阶Map。没有什么比绘制真实的的RGB图片更好的了。
我想它会很容易实现一个版本,它接受3个浮点数的元组(向量)的2D数组或形状[:,:,3]的浮点数的ndarray。我想这通常是有用的功能。它也会对绘制真实的RGB颜色图像有用,如从OpenCL输出的纹理
5条答案
按热度按时间zujrkrfu1#
这几乎和@Hooked代码一样,但是要快得多。
qhhrdooz2#
修改
mpmath
的绘图代码,即使你不知道numpy和matplotlib的原始函数**,你也可以用它来绘制numpy数组**,如果你知道这个函数,see my original answer可以使用mpmath.cplot
。从这里,你可以绘制一个任意的复数numpy数组:
xtfmy6hx3#
库
mpmath
使用matplotlib
生成复杂平面的美丽图像。在复杂平面上,您通常关心极点,因此函数的参数给出颜色(因此极点将形成螺旋)。极大或极小值的区域由饱和度控制。来自文档:默认情况下,复数参数(相位)显示为颜色(色调),幅值显示为亮度。您还可以提供自定义颜色函数(* color *)。此函数应将复数作为输入,并返回包含范围为0.0 - 1.0的浮点数的RGB三元组。
示例:
显示zeta function、平凡零点和临界条带的另一个示例:
2q5ifsrm4#
您可以使用
matplotlib.colors.hsv_to_rgb
代替colorsys.hls_to_rgb
。matplotlib
函数大约快10倍!请查看以下结果:下面是@nadapez挑选答案的方法:
用1024*1024二维阵列对两种方法的结果进行检验:
在我的旧笔记本电脑上显示的结果是:
piv4azn75#
您也可以使用PIL.image来转换它