簡體   English   中英

如何使用python中的方程填充多維數組

[英]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()沿另一個維度顯式重復索引以獲得ij完整二維數組:

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.

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