详解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读写excel的方法
Nov 18 Python
Python中关于字符串对象的一些基础知识
Apr 08 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
python实现log日志的示例代码
Apr 28 Python
python 反向输出字符串的方法
Jul 16 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
Python选择网卡发包及接收数据包
Apr 04 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
Python OpenCV 图像平移的实现示例
Jun 04 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下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php绘制一个扇形的方法
2015/01/24 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
javascript 弹出层组件(升级版)
2011/05/12 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
js实现车辆管理系统
2020/08/26 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
浅谈Python爬虫基本套路
2019/03/25 Python
分析经典Python开发工程师面试题
2019/04/08 Python
浅析Python3 pip换源问题
2020/01/06 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
Opencv求取连通区域重心实例
2020/06/04 Python
windows支持哪个版本的python
2020/07/03 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
课前三分钟演讲稿
2014/04/24 职场文书
售后客服个人自我评价
2014/09/14 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
社区党建工作总结2015
2015/05/13 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书