Python初学者。我正在使用numpy和matplotlib。
我有一个正弦函数,可生成100项宽的1D列表。我想把它变成一个2D列表/数组/矩阵,它是100项宽和50项长,其中该矩阵的每一行都与最后一行相同(这里的数字是任意的)。
然后我想将其绘制为灰度x-y热图,其中颜色与每个索引的数量成比例。类似的东西:
我生成我的1D数组:
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 /强度空间中绘制条纹。
是否有一个简单的循环我可以实现' copy'这个列表x次,然后一个方法供我绘制这些?提前谢谢。
答案 0 :(得分:1)
要复制数组,您可以使用列表推导:
x_matrix=[x_array for i in range(50)]
如果你没有像matplotlib这样的好包装,那么绘图会更难。 然后就是
import matplotlib.pyplot as plt
plt.imshow(x_matrix)
答案 1 :(得分: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的5x10数组。
如果x_array
不是一个刚开始的numpy数组,那么将它变成一个非常容易:
x_array = np.array(x_array)
答案 2 :(得分:0)
如果你想要一个与你描述的图像相对应的数组,你可以简单地使用NumPy的切片表示法来填充具有相同值的所有“行”:
I = np.zeros((50,100))
I[:] = np.cos(np.pi * d * x / lam)**2 * np.sinc(np.pi * b * x / lam)**2