详解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实现的多线程端口扫描工具分享
Jan 21 Python
打包发布Python模块的方法详解
Sep 18 Python
python:socket传输大文件示例
Jan 18 Python
numpy中矩阵合并的实例
Jun 15 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
使用Python在Windows下获取USB PID&VID的方法
Jul 02 Python
wxPython电子表格功能wx.grid实例教程
Nov 19 Python
python3 webp转gif格式的实现示例
Dec 10 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
降低python版本的操作方法
Sep 11 Python
python游戏开发之pygame实现接球小游戏
Apr 22 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 Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
php 随机排序广告的实现代码
2011/05/09 PHP
php 邮件发送问题解决
2014/03/22 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
python递归全排列实现方法
2018/08/18 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
Python3.5运算符操作实例详解
2019/04/25 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
Python tkinter常用操作代码实例
2020/01/03 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
数据库的约束含义
2012/09/09 面试题
医学院校毕业生自荐信范文
2014/01/01 职场文书
五水共治一句话承诺
2014/05/30 职场文书
小学美术教学反思
2016/02/17 职场文书
Python 如何实现文件自动去重
2021/06/02 Python
springboot如何初始化执行sql语句
2021/06/22 Java/Android
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电