详解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开发常用的一些开源Package分享
Feb 14 Python
python采集百度百科的方法
Jun 05 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
python查看模块安装位置的方法
Oct 16 Python
[原创]Python入门教程4. 元组基本操作
Oct 31 Python
Python判断变量名是否合法的方法示例
Jan 28 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
python3爬取torrent种子链接实例
Jan 16 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
Selenium自动化测试工具使用方法汇总
Jun 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中http_build_query 的一个问题
2012/03/25 PHP
destoon常用的安全设置概述
2014/06/21 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
django model去掉unique_together报错的解决方案
2016/10/18 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
Python ATM功能实现代码实例
2020/03/19 Python
python3注册全局热键的实现
2020/03/22 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
临床医学系毕业生推荐信
2013/11/09 职场文书
赡养老人协议书
2014/04/21 职场文书
奥林匹克的口号
2014/06/13 职场文书
社会学专业求职信
2014/07/17 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书