一、什麼是numpymeshgrid?
NumPy是一個Python庫,用於科學計算和數據分析。在NumPy中,meshgrid函數用於生成網格點坐標矩陣,可以將兩個一維數組諸如xPoints和yPoints轉換為兩個二維數組X和Y。在3D繪圖、基於像素的圖像繪製、插值和樣條函數以及核密度估計中,meshgrid函數非常有用。
meshgrid的四個參數的類型和維度必須相同。因此,meshgrid是按照維度排列,意味着生成的第一個數組索引代表第一維,在2維情況下是y軸;第二個數組索引代表第二維,在2維情況下是x軸。
import numpy as np
# 兩個一維數組ndarray對象
xPoints = np.array([0, 1, 2])
yPoints = np.array([0, 1, 2])
# 生成二維數組
X, Y = np.meshgrid(xPoints, yPoints)
print(X)
print(Y)
輸出:
array([[0, 1, 2], [0, 1, 2], [0, 1, 2]]) array([[0, 0, 0], [1, 1, 1], [2, 2, 2]])
二、numpymeshgrid的特點
使用numpymeshgrid函數有以下幾個特點:
1. meshgrid函數使得一對坐標向量成為了一個坐標矩陣。其中x向量在行方向上重複,y向量在列方向上重複。因此,X和Y中的每個值都是由相應的x、y坐標計算出來的。
2. meshgrid函數的輸出數組的維度與輸入數組的維度相同。
3. 當坐標向量的長度不同的時候,致使ndgrid返回值並不相同。而如果想在大小不相同的向量上只進行一次計算,則可以使用broadcas功能。
三、numpymeshgrid函數在圖形繪製中的應用
將numpymeshgrid函數與Matplotlib包一起使用,可以輕鬆實現三維平面和曲面圖形的繪製。如下所示,可以繪製一個簡單的三維平面圖形。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
# Axes3D對象
ax = fig.add_subplot(111, projection='3d')
# X和Y的值由numpymeshgrid函數計算得出
X, Y = np.meshgrid(np.arange(-10, 10, 0.3), np.arange(-10, 10, 0.3))
# 計算Z的值
Z = np.sin(np.sqrt(X**2 + Y**2))
# 繪製三維面
ax.plot_surface(X, Y, Z)
plt.show()
輸出:
四、numpymeshgrid函數用於計算樣例方程
numpymeshgrid函數也可以用於一些計算方程、數學統計中。以二元高斯分布為例,輸入兩個一維數組,即可輸出其在該位置的概率密度值。
import numpy as np
import matplotlib.pyplot as plt
# 二元高斯分布方程
def multivariate_gaussian(pos, mu, Sigma):
n = mu.shape[0]
Sigma_det = np.linalg.det(Sigma)
Sigma_inv = np.linalg.inv(Sigma)
N = np.sqrt((2*np.pi)**n * Sigma_det)
fac = np.einsum('...k,kl,...l->...', pos-mu, Sigma_inv, pos-mu)
return np.exp(-fac / 2) / N
# numpymeshgrid函數生成二維數組X和Y
X, Y = np.meshgrid(np.linspace(-5, 5), np.linspace(-5, 5))
# 標準差為1的二元高斯分布
pos = np.empty(X.shape + (2,))
pos[:, :, 0] = X
pos[:, :, 1] = Y
mu = np.array([0., 0.])
Sigma = np.array([[1., 0.], [0., 1.]])
# 計算概率密度值
Z = multivariate_gaussian(pos, mu, Sigma)
# 繪製二元高斯分布
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis', linewidth=0, antialiased=False)
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
plt.show()
輸出:
五、使用numpymeshgrid在矩陣運算中升維度
在矩陣運算中,為了保證輸入數據的維度一致,可能需要將一部分數據進行升維度。在numpy中,使用reshape、tile等函數可以實現。numpymeshgrid也可以實現給數據升維度的功能。例如以下代碼,將一維數組升維成二維數組。
import numpy as np
# 一維數組
a = np.array([0, 1, 2])
b = np.array([0, 1])
# 二維數組
c, d = np.meshgrid(a, b)
print(c)
print(d)
輸出:
array([[0, 1, 2], [0, 1, 2]]) array([[0, 0, 0], [1, 1, 1]])
六、小結
本文主要介紹了numpymeshgrid函數的定義及其相關的實際應用。我們可以看到,NumPy庫中的meshgrid函數在圖形繪製、統計分析、方程計算、矩陣運算等方面都有着重要的應用。雖然numpymeshgrid已經是一個非常基礎的函數,但是它在數據分析、數據可視化等方面的作用不容小覷。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/227451.html