numpy库学习之np.meshgrid函数

numpy库学习之np.meshgrid函数

一、简介

np.meshgrid 是 NumPy 库中的一个函数,用于从坐标向量构造网格。这在多维函数的评估、数据可视化等方面非常有用。np.meshgrid 可以生成二维或更高维度的网格,其中每个维度的值都来自相应的一维数组。

二、语法和参数

np.meshgrid 的基本语法如下:

python 复制代码
numpy.meshgrid(*xi, indexing='xy', sparse=False)
  • *xi:一系列数组,表示每个维度的坐标点。
  • indexing:一个字符串,指定索引的顺序。'xy'表示第一个维度是x轴,第二个维度是y轴;'ij'表示第一个维度是行,第二个维度是列。
  • sparse:布尔值,如果为True,则返回稀疏的网格,即只包含坐标数组,而不是完整的网格矩阵。
三、实例
3.1 基本二维网格
python 复制代码
import numpy as np

x = np.array([1, 2, 3])
y = np.array([4, 5, 6, 7])

X, Y = np.meshgrid(x, y)
print("X:")
print(X)
print("Y:")
print(Y)

输出:

复制代码
X:
[[1 2 3]
 [1 2 3]
 [1 2 3]
 [1 2 3]]
Y:
[[4 4 4]
 [5 5 5]
 [6 6 6]
 [7 7 7]]
3.2 使用索引顺序
python 复制代码
X, Y = np.meshgrid(x, y, indexing='ij')
print("X (indexing='ij'):")
print(X)
print("Y (indexing='ij'):")
print(Y)

输出:

复制代码
X (indexing='ij') :
[[1 1 1]
 [2 2 2]
 [3 3 3]]
Y (indexing='ij') :
[[4 5 6]
 [4 5 6]
 [4 7 7]]
3.3 稀疏网格
python 复制代码
X_sparse, Y_sparse = np.meshgrid(x, y, sparse=True)
print("X (sparse=True):")
print(X_sparse)
print("Y (sparse=True):")
print(Y_sparse)

输出:

复制代码
X (sparse=True):
[[1 2 3]]
Y (sparse=True):
[[4]
 [5]
 [6]
 [7]]
四、注意事项
  • np.meshgrid 可以用于生成多维网格,但在此示例中只展示了二维网格的用法。
  • 当使用indexing='ij'时,生成的网格将按照矩阵索引的方式排列,即第一个索引变化得更快。
  • sparse参数设置为True时,可以节省内存,但返回的不是完整的网格矩阵,而是坐标点的索引。
  • 在某些情况下,如果输入数组的长度不一致,np.meshgrid 会广播较短的数组以匹配较长的数组,以生成完整的网格。
五、原理解释

np.meshgrid 函数生成网格的原理基于笛卡尔积的概念。笛卡尔积是集合论中的一个概念,学过离散数学的同学都知道,表示两个集合所有可能的有序对的集合。

np.meshgrid 的上下文中,它意味着将两个一维数组的所有元素进行配对,形成二维网格。

5.1原理说明

假设有两个一维数组 xy

  • x = [x1, x2, ..., xn]
  • y = [y1, y2, ..., ym]

np.meshgrid 将这些数组的元素配对,形成 nm 列的网格。具体来说:

  • 对于 x 中的每个元素 xi,它将与 y 中的所有元素进行配对。
  • 同理,y 中的每个元素 yj 也将与 x 中的所有元素进行配对。
5.2 以二维网格为例
  1. 生成 X 轴网格 :对于 x 中的每个元素,将其复制 n 次,形成 n 行,每列有 n 个相同的 xi

  2. 生成 Y 轴网格 :对于 y 中的每个元素,将其复制 m 次,形成 m 列,每行有 m 个相同的 yj

  3. 组合成网格 :将步骤1和步骤2的结果组合起来,形成 nm 列的二维网格。

5.3 示例

假设 x = [1, 2]y = [3, 4, 5],那么:

  • x 的每个元素都与 y 中的所有元素配对。
  • y 的每个元素都作为一列,与 x 中的所有元素配对。
python 复制代码
import numpy as np

x = np.array([1, 2])
y = np.array([3,4, 5])

X, Y = np.meshgrid(x, y)
print("X:")
print(X)
print("Y:")
print(Y)

组合后的网格为:

复制代码
X:
[[1 2]
 [1 2]
 [1 2]]
Y:
[[3 3]
 [4 4]
 [5 5]]

这表示每个 (xi, yj) 的配对,形成了一个完整的二维网格。

注意事项

  • indexing='ij' 时,网格的排列顺序是先按行变化,再按列变化,这与矩阵的索引方式一致。
  • 稀疏网格(sparse=True)只返回坐标轴上的值,而不是完整的网格矩阵,这可以节省内存,特别是在处理高维数据时。如上例的稀疏化表示为:
python 复制代码
X:
[[1]
 [2]]
Y:
[[3 4 5]]
相关推荐
2303_Alpha10 小时前
SpringBoot
笔记·学习
萘柰奈10 小时前
Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
学习·unity
沐矢羽10 小时前
Tomcat PUT方法任意写文件漏洞学习
学习·tomcat
好奇龙猫10 小时前
日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(10):91-100语法+考え方13
学习
向阳花开_miemie11 小时前
Android音频学习(十八)——混音流程
学习·音视频
工大一只猿11 小时前
51单片机学习
嵌入式硬件·学习·51单片机
c0d1ng11 小时前
量子计算学习(第十四周周报)
学习·量子计算
Hello_Embed18 小时前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中18 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
Magnetic_h19 小时前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa