前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >轻松搞懂Numpy中的Meshgrid函数

轻松搞懂Numpy中的Meshgrid函数

作者头像
触摸壹缕阳光
发布2020-03-27 16:39:00
发布2020-03-27 16:39:00
4K00
代码可运行
举报
运行总次数:0
代码可运行
全文字数:2208字

阅读时间:10分钟

前言

本文主要介绍Numpy模块中的Meshgrid函数。meshgrid函数就是用两个坐标轴上的点在平面上画网格(当然这里传入的参数是两个的时候)。当我们指定多个参数,比如三个参数,那么我们就可以用三个一维的坐标轴上的点在三维平面上绘制网格。

a

Meshgrid 参 数

numpy.meshgrid(* xi,** kwargs )

。array_like代表网格坐标的一维数组,这里可以传入多个一维数组的值。但是这里需要注意的就是如果我们给传入的是一个矩阵(多维数组)的话,他会自动把这个矩阵转换成一维数组;

  1. 索引(indexing):('xy'[笛卡尔],'ij'[矩阵]),可选。默认是'xy',下面会详细解释一下;
  2. 稀疏(sparse):bool,可选。默认为False。如果为True为了节省内存会返回一个稀疏矩阵;
  3. 复制(copy):bool,可选。默认为True。如果为False则为了节省内存返回原始的视图。

返回值:

:ndarray。对于二维数组来说,我们的参数是

两个一维数组,我们设

形状为N,

的形状为M。那么他的返回值是一个list列表,里面存放着两个矩阵,我们可以通过解包操作来获取

两个矩阵,这里的返回值

。我们指定了indexing参数,如果indexing = 'xy'(默认)我们返回的

矩阵的形状是(M,N);如果indexing = 'ij'的话我们返回的

矩阵的形状就是(N,M)。

b

indexing 参 数

上面介绍了indexing参数有两个值'xy'和'ij',默认值为'xy'。那他们两个之间有什么区别呢?其中'xy'代表的是笛卡尔,'ij'代表的是矩阵。我们直接通过结果来看。

代码语言:javascript
代码运行次数:0
运行
复制
import numpy as np

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

xv,yv = np.meshgrid(x,y,indexing = 'xy')

xv2,yv2 = np.meshgrid(x,y,indexing = 'ij')

print('-----向量的形状-----')
print(x.shape)
print(y.shape)

print('-----xy-----')
print(xv.shape)
print(yv.shape)

print('-----ij-----')
print(xv2.shape)
print(yv2.shape)

-----向量的形状-----
(3,)
(4,)
-----xy-----
(4, 3)
(4, 3)
-----ij-----
(3, 4)
(3, 4)

从上面我们可以看出,对于二维数组来说,对于两个长度为3和4的一维数组,我们设N = 3 ,M = 4。对于我们indexing = 'xy'(默认)来说,得到xv以及yv矩阵的形状是(M,N)也就是(4,3);那对于indexing = 'ij'我们的xv以及yv矩阵的形状是(N,M)也就是(3,4)。

那对于三维来说,参数是三个一维数组,并且一维数组的形状分别是N,M,P,那么如果indexing = 'xy'的话返回的三个矩阵xv,yv,zv的形状都是(M,N,P);如果indexing = 'ij'的话返回的是三个矩阵xv,yv,zv的形状都是(N,M,P)。

代码语言:javascript
代码运行次数:0
运行
复制
import numpy as np

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

xv, yv = np.meshgrid(x, y, sparse=False, indexing='ij')

for i in zip(xv.flat,yv.flat):
    print(i)
print('----------')
xv, yv = np.meshgrid(x, y, sparse=False, indexing='xy')
for i in zip(xv.flat,yv.flat):
    print(i)

▲运行结果

c

如 何 使 用 ?

  1. xv,yv = meshgrid(x,y)
  2. xv,yv = meshgrid(x)与xv,yv = meshgrid(x,x)是等同的
  3. xv,yv,zv = meshgrid(x,y,z)生成三维数组,可用来计算三变量的函数和绘制三维立体图

上面的这些都是直接进行解包后的返回值。其实他返回的是一个list列表,列表中存放的xv,yv,zv的这些numpy数组。

代码语言:javascript
代码运行次数:0
运行
复制
import numpy as np

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

xv,yv = np.meshgrid( x , y )

print(xv)
print(yv)

[[1 2 3]
 [1 2 3]
 [1 2 3]
 [1 2 3]]
[[4 4 4]
 [5 5 5]
 [6 6 6]
 [7 7 7]]

我们通过对两个参数来一步一步的分析来看,看得到的结果是如何变成一个网格的:

x:表示我们的一维向量(1,2,3),他的N = 3 y:表示我们的一维向量(4,5,6,7),他的N = 4 xv:表示x坐标轴上的坐标矩阵 yv:表示y坐标轴上的坐标矩阵

代码语言:javascript
代码运行次数:0
运行
复制
x = np.array([1,2,3]) #x = (x1,x2,x3)
y = np.array([4,5,6,7]) #y = (y1,y2,y3,y4)
代码语言:javascript
代码运行次数:0
运行
复制
xv,yv = np.meshgrid( x , y )

▲xv矩阵

我们把我们的一维向量

看成了

,我们也可以看上面我输出的xv[[1 2 3][1 2 3] [1 2 3] [1 2 3]],如果看成是

,也就是4个向量,如图所示。

▲yv矩阵

我们把我们的y向量看成了

,然后我们从上面的打印出来的结果[[4 4 4] [5 5 5][6 6 6] [7 7 7]],我们的向量被竖着放起,然后推广成三列。正如我们的yv矩阵所示。

我们的两个一维数组形成的网格,我们就可以通过上面的分析得到:

▲网格化数据

▲左边与其对应值

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档