numpy.meshgrid
numpy.meshgrid(*xi, copy=True, sparse=False, indexing='xy')[source]
从坐标向量返回坐标矩阵。
给定一维坐标数组x1,x2,…,xn
,制作N-D坐标数组以对N-D网格上的N-D标量/矢量场进行矢量化评估。
Changed in version 1.9: 1-D and 0-D cases are allowed.
参数 : | x1, x2,…, xn :array_like 表示网格坐标的一维数组。 indexing : 笛卡尔(默认为 或矩阵( 有关更多详细信息,请参见注释。 1.7.0版中的新功能。 sparse : 如果为 则返回一个稀疏网格以节省内存。 默认值为 copy : 如果为 则返回原始数组的视图以节省内存。 默认值为
可能会返回非连续数组。 此外,广播阵列的一个以上的元素 可以引用单个存储位置。 如果需要写入阵列,请先进行复制。 1.7.0版中的新功能。 |
返回值 : | X1, X2,…, XN :ndarray 对于长度为 如果返回
或 如果 且重复xi的元素以沿x1的第一个维度填充矩阵, 第二个用于x2,依此类推。 |
Notes
此函数通过indexing关键字参数支持两种索引约定。 赋予字符串'ij'将返回具有矩阵索引的网格,而'xy'将返回具有笛卡尔索引的网格。 在输入长度为M和N的二维情况下,对于'xy'索引,输出的形状为(N,M),对于'ij'索引,输出的形状为(M,N)。 在输入长度为M,N和P的3-D情况下,对于“ xy”索引,输出的形状为(N,M,P),对于'ij'索引输出的形状为(M,N,P)。 以下代码片段说明了这种差异:
import numpy as np # 定义 x 和 y 的一维数组 x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) # 生成网格,使用 'ij' 索引 xv_ij, yv_ij = np.meshgrid(x, y, sparse=False, indexing='ij') nx, ny = len(x), len(y) print("Using 'ij' indexing:") for i in range(nx): for j in range(ny): # 处理 xv_ij[i,j], yv_ij[i,j] print(f"xv_ij[{i},{j}] = {xv_ij[i, j]}, yv_ij[{i},{j}] = {yv_ij[i, j]}") print("\n") # 生成网格,使用 'xy' 索引 xv_xy, yv_xy = np.meshgrid(x, y, sparse=False, indexing='xy') print("Using 'xy' indexing:") for i in range(nx): for j in range(ny): # 处理 xv_xy[j,i], yv_xy[j,i] print(f"xv_xy[{j},{i}] = {xv_xy[j, i]}, yv_xy[{j},{i}] = {yv_xy[j, i]}")
在1-D和0-D情况下,索引和稀疏关键字无效
例子
1)基础用法
import numpy as np # 定义两个一维数组 x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) # 生成网格 X, Y = np.meshgrid(x, y) print("X:") print(X) print("Y:") print(Y)
2)三维网格
import numpy as np # 定义三个一维数组 x = np.array([1, 2]) y = np.array([3, 4]) z = np.array([5, 6]) # 生成三维网格 X, Y, Z = np.meshgrid(x, y, z) print("X:") print(X) print("Y:") print(Y) print("Z:") print(Z)
3)稀疏网格
import numpy as np # 定义两个一维数组 x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) # 生成稀疏网格 X, Y = np.meshgrid(x, y, sparse=True) print("X:") print(X) print("Y:") print(Y)
4)indexing 参数
import numpy as np # 定义两个一维数组 x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) # 使用 'ij' 索引生成网格 X, Y = np.meshgrid(x, y, indexing='ij') print("X:") print(X) print("Y:") print(Y)
5)使用示例
import numpy as np # 定义网格的大小 nx, ny = (3, 2) # 生成 x 和 y 的等间隔点 x = np.linspace(0, 1, nx) y = np.linspace(0, 1, ny) # 生成稠密网格 xv_dense, yv_dense = np.meshgrid(x, y) print("Dense meshgrid:") print("xv_dense:") print(xv_dense) print("yv_dense:") print(yv_dense) # 生成稀疏网格 xv_sparse, yv_sparse = np.meshgrid(x, y, sparse=True) print("\nSparse meshgrid:") print("xv_sparse:") print(xv_sparse) print("yv_sparse:") print(yv_sparse)
meshgrid对于评估网格上的功能非常有用
import numpy as np import matplotlib.pyplot as plt # 定义 x 和 y 的范围 x = np.arange(-5, 5, 0.1) y = np.arange(-5, 5, 0.1) # 生成网格 xx, yy = np.meshgrid(x, y, sparse=True) # 计算 z 值 z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2) # 绘制等高线填充图 h = plt.contourf(x, y, z, cmap='viridis') # 添加颜色条 plt.colorbar(h) # 显示图形 plt.show()