《利用python进行数据分析》——4.3 利用数组进行数据处理——np.meshgrid方法——读书笔记

《利用python进行数据分析》——4.3 利用数组进行数据处理——np.meshgrid方法

1.numpy.meshgrid()是什么

numpy.meshgrid()方法定义:

np.meshgrid()函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x,y)对)

numpy.meshgrid(*xi, **kwargs)
Return coordinate matrices from coordinate vectors.


根据输入的坐标向量生成应的坐标矩阵

即:根据输入的,2个坐标向量(一维数组)——生成——2个坐标矩阵(二维矩阵)

举例:

2个向量:a向量=([0,1,2]),b 向量=([0,1])

那么该如何通过这2个向量生成2个二维矩阵?

假定,a向量[0,1,2]作为X轴(x坐标为0,1,2),b向量[0,1]作为Y轴(y坐标为0,1)

生成坐标系如下:

è¿éåå¾çæè¿°

由a向量组成的坐标矩阵=坐标系中所有交点的“横坐标”的集合

由b向量组成的坐标矩阵=坐标系中所有交点的“纵坐标”的集合

即:由a向量组成的坐标矩阵是:[[0,1,2], [0,1,2]]

       由b向量组成的坐标矩阵是:[[0,0,0],[1,1,1]

所以我认为,meshgrid方法可以理解为:

根据输入的2个坐标向量(一维数组)——生成坐标系——并将坐标系中所有交点的横、纵坐标的集合(即2个坐标矩阵)返回给调用者

例子如下:

In [1]: import numpy as np

In [8]: a = np.array([0,1,2])# a坐标向量

In [9]: b = np.array([0,1])# b坐标向量

In [10]: res = np.meshgrid(a,b)
# meshgrid()方法根据a,b两个坐标向量,返回两个坐标矩阵(所有横、纵坐标的集合)


In [11]: res
Out[11]:
[array([[0, 1, 2],
        [0, 1, 2]]), array([[0, 0, 0],
        [1, 1, 1]])]
# meshgrid()返回的res有两个坐标矩阵,第一个坐标矩阵是所有横坐标的集合,第二个坐标矩阵是所有纵坐标的集合


In [12]: res_a,res_b = np.meshgrid(a,b)
In [14]: res_a
Out[14]:
array([[0, 1, 2],
       [0, 1, 2]])
# meshgrid()返回有两个坐标矩阵,第一个坐标矩阵res_a是所有横坐标的集合
In [15]: res_b
Out[15]:
array([[0, 0, 0],
       [1, 1, 1]])
# meshgrid()返回有两个坐标矩阵,第二个坐标矩阵res_b 是所有纵坐标的集合

2.假设我们想要在一组值(网格型,即二维矩阵/坐标矩阵)上计算函
数sqrt(x^2+y^2)

这是《利用python进行数据分析》书中的例子:

首先,解释下题目:

在网格型数组(即二维矩阵/坐标矩阵,也就是我们上面得到的二维坐标系)上计算函数sqrt(x^2+y^2)

那么就是先根据输入的2个坐标向量(一维数组)——生成——2个坐标矩阵(二维矩阵),然后把这两个坐标矩阵当做两个浮点数那样编写表达式即可。

In [14]: import matplotlib.pyplot as plt
In [15]: import numpy as np
In [16]: points=np.arange(-5,5,0.01)
#1000个间隔0.01的点
In [17]: xs,ys=np.meshgrid(points,points)
#用1000个间隔0.01的点作为横、纵坐标,生成一个坐标系(有1000*1000个点),
#将坐标系中所有交点的横、纵坐标的集合(即2个坐标矩阵)赋值给xs,ys
In [18]: xs
Out[18]:
array([[-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       ...,
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99]])

In [19]: ys
Out[19]:
array([[-5.  , -5.  , -5.  , ..., -5.  , -5.  , -5.  ],
       [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],
       [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],
       ...,
       [ 4.97,  4.97,  4.97, ...,  4.97,  4.97,  4.97],
       [ 4.98,  4.98,  4.98, ...,  4.98,  4.98,  4.98],
       [ 4.99,  4.99,  4.99, ...,  4.99,  4.99,  4.99]])

In [21]: z=np.sqrt(xs ** 2 + ys ** 2)#计算函数sqrt(x^2+y^2)

In [22]: z
Out[22]:
array([[7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985,
        7.06400028],
       [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
        7.05692568],
       [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
        7.04985815],
       ...,
       [7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603,
        7.04279774],
       [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
        7.04985815],
       [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
        7.05692568]])

In [23]: plt.imshow(z, cmap=plt.cm.gray);plt.colorbar()
Out[23]: <matplotlib.colorbar.Colorbar at 0xc46b790>

In [24]: plt.imshow(z, cmap=plt.cm.cool);plt.colorbar()
Out[24]: <matplotlib.colorbar.Colorbar at 0xc3f1f30>

这是二维图,展示了z的分布

绘制3维图

In [37]: zs = np.sin(z)

In [46]: fig = plt.figure()

In [47]: ax = Axes3D(fig)

In [48]: ax.scatter(xs, ys, zs)
Out[48]: <mpl_toolkits.mplot3d.art3d.Path3DCollection at 0xcb3ca90>

In [49]: ax.set_xlabel('x', fontdict={'size': 10, 'color': 'red'})
Out[49]: Text(-0.032787558578831956, -0.08518457597201665, 'x')

In [50]: ax.set_ylabel('y', fontdict={'size': 10, 'color': 'green'})
Out[50]: Text(0.05563329694431044, -0.07169324642766257, 'y')

In [51]: ax.set_zlabel('z', fontdict={'size': 10, 'color': 'blue'})
Out[51]: Text(0.08636615974838432, 0.011570871378978368, 'z')

In [52]: plt.show()

上图本来应该是散点图,(-5, 5, 0.01)1000*1000个点,应该是点太多了,所以看不清,

下图是(-5, 5, 0.1)组成的例子,100*100个点,已经有些糊了

下图是(-5, 5, 0.25)组成的例子,像个四角翘起的帽子(顶上中间凹进去了)

下图是(-5, 5, 0.2)组成的例子

这是np.arange(-10, 10, 0.25)的图

部分转自:https://blog.csdn.net/lllxxq141592654/article/details/81532855

部分转自:https://www.cnblogs.com/black-mamba/p/9186965.html

发布了15 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/baidu_28660921/article/details/104251354
今日推荐