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]]
相关推荐
API_Zevin16 分钟前
如何优化亚马逊广告以提高ROI?
大数据·开发语言·前端·后端·爬虫·python·学习
不是只有你能在乱世中成为大家的救世主32 分钟前
学习第六十二行
c语言·c++·学习·gitee
工程师老罗39 分钟前
我用AI学Android Jetpack Compose之Jetpack Compose学习路径篇
android·学习·android jetpack
14_111 小时前
Cherno C++学习笔记 P49 C++中使用静态库
c++·笔记·学习
studyForMokey1 小时前
【Android学习】Adapter中使用Context
android·学习·kotlin
Jackilina_Stone2 小时前
【HUAWEI】HCIP-AI-MindSpore Developer V1.0 | 第一章 神经网络基础( 1 人工神经网络 ) | 学习笔记
人工智能·神经网络·学习·hcip·huawei
一个欧维3 小时前
党员学习交流平台
学习·java-ee·毕业设计·springboot·课程设计
一弓虽3 小时前
java基础学习——java集合简单介绍及使用
java·学习
肥肠可耐的西西公主4 小时前
前端(API)学习笔记(CLASS 4):进阶
笔记·学习