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()
您可以建立稀疏輸出陣列以節省記憶體和計算時間。
>>> 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()