[英]Creating a 2D array from a 1D list and plotting as 2D heatmap
Python初學者在這里。 我正在使用numpy和matplotlib。
我有一個正弦函數,可生成100個項目寬的一維列表。 我想將其變成2D列表/數組/矩陣,其寬度為100個項目,長度為50個項目,其中該矩陣的每個新行都與最后一個相同(這里的數字是任意的)。
然后,我想將其繪制為灰度xy熱圖,其中顏色與每個索引的數量成比例。 就像是:
我生成我的一維數組是這樣的:
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次,然后為我繪制這些列表? 提前致謝。
要復制數組,可以使用列表推導:
x_matrix=[x_array for i in range(50)]
如果您沒有像matplotlib這樣的優質軟件包,則繪圖將更加困難。 那就是
import matplotlib.pyplot as plt plt.imshow(x_matrix)
我認為您使用的是numpy
因為您提到了plot和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)
如果您想要一個與您描述的圖像相對應的數組,則可以簡單地使用NumPy的切片符號用相同的值填充所有“行”:
I = np.zeros((50,100))
I[:] = np.cos(np.pi * d * x / lam)**2 * np.sinc(np.pi * b * x / lam)**2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.