详解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之用Python计算
Sep 12 Python
Python反射用法实例简析
Dec 22 Python
python语言中with as的用法使用详解
Feb 23 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
Python WSGI的深入理解
Aug 01 Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
django实现支付宝支付实例讲解
Oct 17 Python
python 实现查询Neo4j多节点的多层关系
Dec 23 Python
python读取mysql数据绘制条形图
Mar 25 Python
详解Python flask的前后端交互
Mar 31 Python
Django数据库(SQlite)基本入门使用教程
Jul 07 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错误、异常处理类
2014/03/21 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
经验几则 推荐
2006/09/05 Javascript
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
懒加载实现的分页&&网站footer自适应
2016/12/21 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
宿舍使用违章电器检讨书
2014/01/12 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
2015年话务员工作总结
2015/04/29 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
叶问观后感
2015/06/15 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
Redis 哨兵机制及配置实现
2022/03/25 Redis