python中grid函数_Python-Numpy模块Meshgrid函数

Numpy中关于Meshgrid函数:meshgrid官方。

1.Meshgrid前言

meshgrid函数就是用两个坐标轴上的点在平面上画网格(当然这里传入的参数是两个的时候)。当然我们可以指定多个参数,比如三个参数,那么我们的就可以用三个一维的坐标轴上的点在三维平面上画网格。

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

索引(indexing):('xy'[笛卡尔],'ij'[矩阵]),可选。默认是'xy',下面会详细解释一下;

稀疏(sparse):bool,可选。默认为False。如果为True为了节省内存会返回一个稀疏矩阵;

复制(copy):bool,可选。默认为True。如果为False则为了节省内存返回源始的视图。

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

两个一维数组,我们设

形状为N,

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

两个矩阵,这里的返回值

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

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

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

3.indexing参数

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

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)

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)运行结果

4.如何使用xv,yv = meshgrid(x,y)

xv,yv = meshgrid(x)与xv,yv = meshgrid(x,x)是等同的

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

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

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坐标轴上的坐标矩阵

x = np.array([1,2,3]) #x = (x1,x2,x3)

y = np.array([4,5,6,7]) #y = (y1,y2,y3,y4)

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矩阵所示。

我们的两个一维数组形成的网格,我们就可以通过上面的分析得到:网格化数据左边与其对应值

你可能感兴趣的:(python中grid函数)