[英]How to fill multidimensional array using an equation in python
我是 python 的新手,我想用一個方程來填充一個 Numpy 多維數組。 在 Fortran 中,我可以使用數組的索引來填充它,這可以在 python 中實現嗎? 假設我有一個方程 a=i*j 其中 i 和 j 分別是行和列的位置。 因此,如果我有一個 n × n 數組,那么該數組將填充等式的結果,因此第一個值將是 1,因為 a=1*1 等等。
您可以使用numpy
廣播來獲得此結果:
i = np.arange(3)[:, np.newaxis] # (3, 1)
# array([0, 1, 2])
j = np.arange(4)[np.newaxis, :] # (1, 4)
# array([0, 1, 2, 3])
arr = i * j # (3 ,4)
# array([[0, 0, 0, 0],
# [0, 1, 2, 3],
# [0, 2, 4, 6]])
您可以使用索引數組i
[ nx 1
] 和j
[ 1 xm
] 執行大多數計算,結果將始終為 [ nxm
]
arr = np.sin(i)**2 + np.cos(i)**2 + (j-i)
# array([[ 1., 2., 3., 4.],
# [ 0., 1., 2., 3.],
# [-1., 0., 1., 2.]])
您還可以使用np.meshgrid()
沿另一個維度顯式重復索引以獲得i
和j
完整二維數組:
i, j = np.meshgrid(np.arange(3), np.arange(4), indexing='ij')
# i
# array([[0, 1, 2, 3],
# [0, 1, 2, 3],
# [0, 1, 2, 3]])
# j
# array([[0, 0, 0, 0],
# [1, 1, 1, 1],
# [2, 2, 2, 2]])
arr = i * j
# array([[0, 0, 0, 0],
# [0, 1, 2, 3],
# [0, 2, 4, 6]])
這是自動廣播期間發生的事情的良好可視化。
注意np.meshgrid()
的索引參數ij
用於矩陣索引; 從文檔:
給出字符串 'ij' 返回一個帶有矩陣索引的網格,而 'xy' 返回一個帶有笛卡爾索引的網格。 在輸入長度為 M 和 N 的二維情況下,輸出的形狀為 (N, M) 用於 'xy' 索引和 (M, N) 用於 'ij' 索引。
要執行a=i*j
或類似的操作,最好先創建一個包含i
值的數組和一個包含j
值的數組,而不是簡單地執行a=i*j
:
例如,如果您想要一個 5 x 10 矩陣:
import numpy as np
i, j = np.meshgrid(np.arange(5), np.arange(10))
a = i * j
結果是:
array([[ 0, 0, 0, 0, 0],
[ 0, 1, 2, 3, 4],
[ 0, 2, 4, 6, 8],
[ 0, 3, 6, 9, 12],
[ 0, 4, 8, 12, 16],
[ 0, 5, 10, 15, 20],
[ 0, 6, 12, 18, 24],
[ 0, 7, 14, 21, 28],
[ 0, 8, 16, 24, 32],
[ 0, 9, 18, 27, 36]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.