详解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写xml文件的操作实例
Oct 05 Python
python解析基于xml格式的日志文件
Feb 25 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
对python周期性定时器的示例详解
Feb 19 Python
Python后台开发Django的教程详解(启动)
Apr 08 Python
pandas如何处理缺失值
Jul 31 Python
python打开使用的方法
Sep 30 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
Django使用Profile扩展User模块方式
May 14 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
Python Django获取URL中的数据详解
Nov 01 Python
Python socket如何解析HTTP请求内容
Feb 12 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自动适应范围的分页代码
2008/08/05 PHP
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
php实现分页显示
2015/11/03 PHP
php文件缓存方法总结
2016/03/16 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
Javascript 面向对象 重载
2010/05/13 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
jQuery异步验证用户名是否存在示例代码
2014/05/21 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
js实现图片实时时钟
2020/01/15 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
python实现聊天小程序
2018/03/13 Python
python获取代码运行时间的实例代码
2018/06/11 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
意大利在线药房:Saninforma
2021/02/11 全球购物
如何用PHP实现邮件发送
2012/12/26 面试题
大学生工作推荐信范文
2013/12/02 职场文书
行政部总经理岗位职责
2014/01/04 职场文书
年终考核评语
2014/01/19 职场文书
学习经验演讲稿
2014/05/10 职场文书
政风行风评议整改方案
2014/09/15 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
导游词之丽江普济寺
2019/10/22 职场文书