详解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 相关文章推荐
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 Python
详解Python迭代和迭代器
Mar 28 Python
python 读取txt中每行数据,并且保存到excel中的实例
Apr 29 Python
matplotlib 纵坐标轴显示数据值的实例
May 25 Python
Python+selenium 获取一组元素属性值的实例
Jun 22 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
使用Pandas对数据进行筛选和排序的实现
Jul 29 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
Python程序慢的重要原因
Sep 04 Python
python Tornado框架的使用示例
Oct 19 Python
Python基础详解之描述符
Apr 28 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
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
php自定义错误处理用法实例
2015/03/20 PHP
php简单防盗链实现方法
2015/07/29 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
Array对象方法参考
2006/10/03 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
和孩子一起学习python之变量命名规则
2018/05/27 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
python类中super() 的使用解析
2019/12/19 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
Python字典dict常用方法函数实例
2020/11/09 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
二年级学生评语大全
2014/04/23 职场文书
搞笑老公保证书
2015/02/26 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript