从1D列表创建2D数组并绘制为2D热图

2024-04-28 21:10:48 发布

您现在位置:Python中文网/ 问答频道 /正文

这里是Python初学者。我用的是numpy和matplotlib。在

我有一个正弦函数,可以生成100个项目宽的一维列表。我想把它变成一个2D列表/数组/矩阵,它宽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作图,得到一条很好的1D线。在

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

有没有一个简单的循环,我可以实现“复制”这个列表x次,然后有一个方法让我绘制这些?提前谢谢。在


Tags: 项目函数numpy列表matplotlib颜色np绘制
3条回答

如果您想要一个与您描述的图像相对应的数组,您可以简单地使用NumPy的切片表示法将所有“行”填充为相同的值:

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

要复制数组,可以使用列表理解:

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

如果没有像matplotlib这样的好软件包,绘图就更难了。 那就是

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

我假设您使用numpy,因为您提到了绘图,matplotlib似乎是事实上的标准。如果是这样的话,你可以用你的数组乘以np.ones(required_shape),广播就可以做你想做的事情。。。e、 g.:

>>> 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的数组中构造了一个5x10数组。在


如果x_array不是一个numpy数组来启动,那么创建它应该很容易:

^{pr2}$

相关问题 更多 >