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]]
相关推荐
酿情师5 小时前
yihan:一款面向连续网页学习的智能侧边栏插件
学习·学习方法·工具·学习工具
瞎某某Blinder6 小时前
DFT学习记录[6]基于 HES06的能带计算+有效质量计算
python·学习·程序人生·数据挖掘·云计算·学习方法
love在水一方7 小时前
VLN 入门学习计划 —— 基于 InternNav
学习
red_redemption10 小时前
自由学习记录(175)
学习
nashane10 小时前
HarmonyOS 6学习:画中画(PiP)状态同步与场景化实战指南
学习·pip·harmonyos·harmonyos 5
_李小白11 小时前
【android opencv学习笔记】Day 8: remap(像素位置重映射)
android·opencv·学习
勤劳的进取家11 小时前
数据链路层基础
网络·学习·算法
d111111111d11 小时前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
y = xⁿ12 小时前
Redis八股学习日记:布隆过滤器
数据库·redis·学习
d111111111d14 小时前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习