详解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 转义字符详细介绍
Mar 21 Python
Python探索之自定义实现线程池
Oct 27 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
对pytorch的函数中的group参数的作用介绍
Feb 18 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
Python本地及虚拟解释器配置过程解析
Oct 13 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
php ios推送(代码)
2013/07/01 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
JQuery each打印JS对象的方法
2013/11/13 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
人力资源部培训专员岗位职责
2014/01/02 职场文书
期末自我鉴定
2014/02/02 职场文书
运动会邀请函范文
2014/02/06 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
《雷雨》教学反思
2016/02/20 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
mysql 子查询的使用
2022/04/28 MySQL
MySQL 计算连续登录天数
2022/05/11 MySQL