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]]
相关推荐
peijiping40 分钟前
Agent 工具执行:并行(parallel_tool_calls)和后台(run_in_background)到底有什么区别? (学习笔记)
笔记·学习·ai agent·claude code
何事误红尘1 小时前
KF32A学习笔记(二):IDE基本使用、srec和hex格式、FreeRTOS移植
学习
IT古董1 小时前
【MES学习笔记系列】MES 推荐书籍与资源
笔记·学习
迪丽热爱1 小时前
每日英语-11
学习
艾莉丝努力练剑2 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
青山是哪个青山10 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
hsjiasb11 小时前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos
崇子嵘12 小时前
基于zynqMP15eg的linux驱动学习
学习
知识分享小能手14 小时前
线性代数学习教程,从入门到精通,向量组的线性相关性 — 完整知识点梳理(7)
学习·线性代数·机器学习
Shell运维手记14 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github