详解numpy.meshgrid()方法使用


Posted in Python onAugust 01, 2019

一句话解释numpy.meshgrid()——生成网格点坐标矩阵。
关键词:网格点,坐标矩阵

网格点是什么?坐标矩阵又是什么鬼?

看个图就明白了:

详解numpy.meshgrid()方法使用

图中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵,就是坐标矩阵。

再看个简单例子

详解numpy.meshgrid()方法使用

A,B,C,D,E,F是6个网格点,坐标如图,如何用矩阵形式(坐标矩阵)来批量描述这些点的坐标呢?

答案如下:

详解numpy.meshgrid()方法使用

这就是坐标矩阵——横坐标矩阵XXX中的每个元素,与纵坐标矩阵YYY中对应位置元素,共同构成一个点的完整坐标。如B点坐标详解numpy.meshgrid()方法使用

下面可以自己用matplotlib来试一试,输出就是上边的图

import numpy as np
import matplotlib.pyplot as plt

x = np.array([[0, 1, 2], [0, 1, 2]])
y = np.array([[0, 0, 0], [1, 1, 1]])


plt.plot(x, y,
   color='red', # 全部点设置为红色
   marker='.', # 点的形状为圆点
   linestyle='') # 线型为空,也即点与点之间不用线连接
plt.grid(True)
plt.show()

如果对matplotlib不熟悉,可能只知道用一列横坐标(线性代数中的1维列向量),一列纵坐标生成(两者元素个数相等)一些点。但是实际上,给matplotlib的坐标信息是矩阵也是可以的,只要横纵坐标的尺寸一样。都会按照对应关系生成点。

但是有需要注意的地方,按照矩阵给坐标点信息,matplotlib会把横坐标矩阵中,每一列对应的点当做同一条线。

举个例子,把上面的代码plotlinestyle=''删掉,或者变成linestyle='-'(这个操作把图的线型改为默认状态),就会发现A-D是连接的,B-E是连接的,C-F是连接的,也即,会认为你输入的是3条线,如图

详解numpy.meshgrid()方法使用

作为练习,自己试着生成如下结果

提示:线型等关键字参数设置可用如下代码

plt.plot(x, y,
   marker='.', # 点的形状为圆点
   markersize=10, # 点设置大一点,看着清楚
   linestyle='-.') # 线型为点划线

详解numpy.meshgrid()方法使用

答案

import numpy as np
import matplotlib.pyplot as plt

x = np.array([[0, 1, 2, 3],
    [0, 1, 2, 3],
    [0, 1, 2, 3],
    [0, 1, 2, 3]])
y = np.array([[0, 0, 0, 0],
    [1, 1, 1, 1],
    [2, 2, 2, 2],
    [3, 3, 3, 3]])


plt.plot(x, y,
   marker='.', # 点的形状为圆点
   markersize=10, # 点设置大一点,看着清楚
   linestyle='-.') # 线型为点划线
plt.grid(True)
plt.show()

到这里,网格点和坐标矩阵的概念就解释清楚了。

那么问题来了,如果需要的图比较大,需要大量的网格点该怎么办呢?比如下面的这种

详解numpy.meshgrid()方法使用

最直接但是最笨的方法,就是按照上面的方法把横纵坐标矩阵XXX,YYY写出来,就像上面练习题中的

详解numpy.meshgrid()方法使用

很明显,对于网格点很多的情况根本没法用。有啥好的办法吗?

有的,注意到我们练习题中的坐标矩阵,其实有大量的重复——XXX的每一行都一样,YYY的每一列都一样。基于这种强烈的规律性,numpy提供的numpy.meshgrid()函数可以让我们快速生成坐标矩阵XXX,YYY。

语法:X,Y = numpy.meshgrid(x, y)

输入的x,y,就是网格点的横纵坐标列向量(非矩阵)
输出的X,Y,就是坐标矩阵。

我们来试验一下:改写第一个例子中的代码,用numpy.meshgrid来实现。

import numpy as np
import matplotlib.pyplot as plt

x = np.array([0, 1, 2])
y = np.array([0, 1])

X, Y = np.meshgrid(x, y)
print(X)
print(Y)


plt.plot(X, Y,
   color='red', # 全部点设置为红色
   marker='.', # 点的形状为圆点
   linestyle='') # 线型为空,也即点与点之间不用线连接
plt.grid(True)
plt.show()
# 从输出的结果来看,两种方法生成的坐标矩阵一毛一样。
[[0 1 2]
 [0 1 2]]
[[0 0 0]
 [1 1 1]]

详解numpy.meshgrid()方法使用

最后给出上面这个图的代码

详解numpy.meshgrid()方法使用

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,1000,20)
y = np.linspace(0,500,20)

X,Y = np.meshgrid(x, y)

plt.plot(X, Y,
   color='limegreen', # 设置颜色为limegreen
   marker='.', # 设置点类型为圆点
   linestyle='') # 设置线型为空,也即没有线连接点
plt.grid(True)
plt.show()

参考文献
https://3water.com/article/166710.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pygame学习笔记(4):声音控制
Apr 15 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
详解Django rest_framework实现RESTful API
May 24 Python
对python 读取线的shp文件实例详解
Dec 22 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
Python class的继承方法代码实例
Feb 14 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 Python
Python os和os.path模块详情
Apr 02 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 #Python
numpy中的meshgrid函数的使用
Jul 31 #Python
pandas的排序和排名的具体使用
Jul 31 #Python
pandas如何处理缺失值
Jul 31 #Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 #Python
使用pandas读取文件的实现
Jul 31 #Python
python3实现mysql导出excel的方法
Jul 31 #Python
You might like
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
python语言中with as的用法使用详解
2018/02/23 Python
简单了解python的break、continue、pass
2019/07/08 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
会议开场欢迎词
2014/01/15 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
团员自我评价范文
2015/03/10 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript