numpy.meshgrid#

numpy.meshgrid(*xi, copy=True, sparse=False, indexing='xy')[原始碼]#

從座標向量傳回座標矩陣的元組。

為 N 維純量/向量場在 N 維網格上的向量化評估建立 N 維座標陣列,給定一維座標陣列 x1, x2,…, xn。

參數:
x1, x2,…, xnarray_like

表示網格座標的 1 維陣列。

indexing{‘xy’, ‘ij’}, optional

輸出結果的笛卡爾 (‘xy’,預設) 或矩陣 (‘ij’) 索引。詳情請參閱「註解」。

sparsebool, optional

若為 True,則維度 i 的傳回座標陣列形狀會從 (N1, ..., Ni, ... Nn) 縮減為 (1, ..., 1, Ni, 1, ..., 1)。這些稀疏座標網格旨在與 廣播 一起使用。當所有座標都用於表達式時,廣播仍然會產生完整維度的結果陣列。

預設值為 False。

copybool, optional

若為 False,則為了節省記憶體,會傳回原始陣列的檢視。預設值為 True。請注意,sparse=False, copy=False 很可能會傳回非連續陣列。此外,廣播陣列的多個元素可能指向單一記憶體位置。若您需要寫入陣列,請先複製。

傳回值:
X1, X2,…, XNndarray 元組

對於長度為 Ni=len(xi) 的向量 x1, x2,…, xn,若 indexing=’ij’,則傳回 (N1, N2, N3,..., Nn) 形狀的陣列;若 indexing=’xy’,則傳回 (N2, N1, N3,..., Nn) 形狀的陣列,其中 xi 的元素會重複以沿著第一個維度填滿 x1 的矩陣,沿著第二個維度填滿 x2 的矩陣,依此類推。

另請參閱

mgrid

使用索引表示法建構多維「meshgrid」。

ogrid

使用索引表示法建構開放式多維「meshgrid」。

如何索引 ndarray

註解

此函式透過 indexing 關鍵字引數支援兩種索引慣例。給定字串 ‘ij’ 會傳回具有矩陣索引的 meshgrid,而 ‘xy’ 則傳回具有笛卡爾索引的 meshgrid。在 2 維情況下,若輸入長度為 M 和 N,則對於 ‘xy’ 索引,輸出形狀為 (N, M);對於 ‘ij’ 索引,輸出形狀為 (M, N)。在 3 維情況下,若輸入長度為 M、N 和 P,則對於 ‘xy’ 索引,輸出形狀為 (N, M, P);對於 ‘ij’ 索引,輸出形狀為 (M, N, P)。以下程式碼片段說明了差異

xv, yv = np.meshgrid(x, y, indexing='ij')
for i in range(nx):
    for j in range(ny):
        # treat xv[i,j], yv[i,j]

xv, yv = np.meshgrid(x, y, indexing='xy')
for i in range(nx):
    for j in range(ny):
        # treat xv[j,i], yv[j,i]

在 1 維和 0 維情況下,indexing 和 sparse 關鍵字沒有作用。

範例

>>> import numpy as np
>>> nx, ny = (3, 2)
>>> x = np.linspace(0, 1, nx)
>>> y = np.linspace(0, 1, ny)
>>> xv, yv = np.meshgrid(x, y)
>>> xv
array([[0. , 0.5, 1. ],
       [0. , 0.5, 1. ]])
>>> yv
array([[0.,  0.,  0.],
       [1.,  1.,  1.]])

meshgrid 的結果是座標網格

>>> import matplotlib.pyplot as plt
>>> plt.plot(xv, yv, marker='o', color='k', linestyle='none')
>>> plt.show()
../../_images/numpy-meshgrid-1_00_00.png

您可以建立稀疏輸出陣列以節省記憶體和計算時間。

>>> xv, yv = np.meshgrid(x, y, sparse=True)
>>> xv
array([[0. ,  0.5,  1. ]])
>>> yv
array([[0.],
       [1.]])

meshgrid 非常適用於評估網格上的函式。若函式取決於所有座標,則可以使用密集和稀疏輸出。

>>> x = np.linspace(-5, 5, 101)
>>> y = np.linspace(-5, 5, 101)
>>> # full coordinate arrays
>>> xx, yy = np.meshgrid(x, y)
>>> zz = np.sqrt(xx**2 + yy**2)
>>> xx.shape, yy.shape, zz.shape
((101, 101), (101, 101), (101, 101))
>>> # sparse coordinate arrays
>>> xs, ys = np.meshgrid(x, y, sparse=True)
>>> zs = np.sqrt(xs**2 + ys**2)
>>> xs.shape, ys.shape, zs.shape
((1, 101), (101, 1), (101, 101))
>>> np.array_equal(zz, zs)
True
>>> h = plt.contourf(x, y, zs)
>>> plt.axis('scaled')
>>> plt.colorbar()
>>> plt.show()
../../_images/numpy-meshgrid-1_01_00.png