2016-03-01 102 views
0

Python初学者在这里。我使用的是numpy和matplotlib。从1D列表创建二维数组并绘制为二维热图

我有一个正弦函数,可以生成100个项目的一维列表。我想把它变成一个二维列表/数组/矩阵,它的宽度为100个项目,长度为50个项目,矩阵的每个新行都与最后一个相同(这里的数字是任意的)。

然后,我想将其绘制为灰度x-y热图,其中颜色与每个指标的数量成比例。喜欢的东西:

enter image description here

我产生我的一维数组是这样的:

for i in range(0,100): 
    x_array[i] = (np.cos(a[i]))**2 * (np.sinc(b[i]))**2 

其中A和B是事先定义的长度相同的列表。然后,我将这个对n进行绘制,以获得一个很好的一维线。

物理学家会认识到这是两个狭缝的干涉图案。我想添加任何长度的另一个维度,以便能够在x/y /强度空间中绘制条纹。

是否有一个简单的循环,我可以实现'复制'这个列表x次,然后我的方法来绘制这些?提前致谢。

回答

0

我假设您使用的是numpy,因为您提到了绘图,而matplotlib似乎是事实上的标准。如果是这样的话,你可以通过np.ones(required_shape)乘以你的阵列和广播应该做你想要什么...例如:

>>> import numpy as np 
>>> a = np.arange(10) 
>>> a * np.ones((5, 10)) 
array([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.], 
     [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.], 
     [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.], 
     [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.], 
     [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]]) 

在这里,我从构建我原来的数组长度有一个10×10阵列。


如果x_array不是numpy的阵列开始,它应该是很容易使一个:

x_array = np.array(x_array) 
+0

谢谢。我编辑了我原来的帖子,说我使用numpy和matplotlib。这很好,谢谢。 –

1

要复制的数组,你可以使用列表补偿rehensions:

x_matrix=[x_array for i in range(50)] 

如果你没有像matplotlib这样的好软件包,绘图更困难。 然后,它仅仅是

import matplotlib.pyplot as plt plt.imshow(x_matrix)

+1

谢谢你,我编辑了我原来的帖子,添加了我使用numpy和matplotlib。这是有效的,对我来说是一个很好的起点,谢谢。 –

+1

哦,顺便说一句。如果你需要它是黑色和白色使用 import matplotlib.cm as cm plt.imshow(x_matrix,cmap = cm.Greys_r) plt.show() – JeD

+0

感谢您的帮助! –

0

如果你想与图像相对应的数组像你描述的,你可以简单地使用与NumPy的切片符号来填充所有“行”具有相同的值:

I = np.zeros((50,100)) 
I[:] = np.cos(np.pi * d * x/lam)**2 * np.sinc(np.pi * b * x/lam)**2