详解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 正则表达式 概述及常用字符
May 04 Python
Python 实现随机数详解及实例代码
Apr 15 Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 Python
unittest+coverage单元测试代码覆盖操作实例详解
Apr 04 Python
python+Splinter实现12306抢票功能
Sep 25 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
基于打开pycharm有带图片md文件卡死问题的解决
Apr 24 Python
Python实现寻找回文数字过程解析
Jun 09 Python
Python识别处理照片中的条形码
Nov 16 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
python源码剖析之PyObject详解
May 18 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
php 中英文语言转换类
2011/09/07 PHP
PHP中::、->、self、$this几种操作符的区别介绍
2013/04/24 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
微信小程序实现图片上传功能
2018/05/28 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
Python3遍历目录树实现方法
2015/05/22 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
学习十八大报告感言
2014/02/28 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
工商管理专业自荐信
2014/06/03 职场文书
校园文化标语
2014/06/18 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
Python实现拼音转换
2021/06/07 Python
Apache POI的基本使用详解
2021/11/07 Servers
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android
Linux磁盘管理方法介绍
2022/06/01 Servers