簡體   English   中英

從1D列表創建2D數組並繪制為2D熱圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM