Numpy中的meshgrid()函数

Numpy中的meshgrid()函数转载自:https://blog.csdn.net/littlehaes/article/details/83543459官方解释:np.meshgrid(*xi,**kwargs)Returncoordinatematricesfromcoordinatevectors.从坐标向量中返回坐标矩阵不够直观直观的例子二维坐标系中,X轴可以取三个值1,2,3,Y轴可以取三…

大家好,又见面了,我是你们的朋友全栈君。

官方解释:

np.meshgrid(*xi, **kwargs)

Return coordinate matrices from coordinate vectors. 从坐标向量中返回坐标矩阵

不够直观

直观的例子

二维坐标系中,X轴可以取三个值 1,2,3, Y轴可以取三个值 7,8, 请问可以获得多少个点的坐标?
显而易见是 6 个:
(1, 7) (2, 7) (3, 7)
(1, 8) (2, 8) (3, 8)

np.meshgrid() 就是干这个的!

#coding:utf-8
import numpy as np
# 坐标向量
a = np.array([1,2,3])
# 坐标向量
b = np.array([7,8])
# 从坐标向量中返回坐标矩阵
# 返回list,有两个元素,第一个元素是X轴的取值,第二个元素是Y轴的取值
res = np.meshgrid(a,b)
#返回结果: [array([ [1,2,3] [1,2,3] ]), array([ [7,7,7] [8,8,8] ])]

同理还可以生成更高维度的坐标矩阵


本文的目的是记录 meshgrid() 的理解过程:

step1. 通过一个示例引入创建网格点矩阵;
step2. 基于步骤1,说明 meshgrid() 的作用;
step3. 详细解读 meshgrid() 的官网定义;

说明:step1 和 2 的数据都是基于笛卡尔坐标系的矩阵,目的是为了方便讨论。

 

step1. 通过一个示例引入创建网格点矩阵;

示例1,创建一个 2 行 3 列的网格点矩阵。

import numpy as np
import matplotlib.pyplot as plt

X = np.array([[0, 0.5, 1],[0, 0.5, 1]])
print("X的维度:{},shape:{}".format(X.ndim, X.shape))
Y = np.array([[0, 0, 0],[1, 1, 1]])
print("Y的维度:{},shape:{}".format(Y.ndim, Y.shape))

plt.plot(X, Y, 'o--')
plt.grid(True)
plt.show()

Numpy中的meshgrid()函数

X矩阵是: [[0. 0.5 1. ], [0. 0.5 1. ]]
Y矩阵是: [[0 0 0], [1 1 1]]

step2. meshgrid() 的作用;

当要描绘的 矩阵网格点的数据量小的时候,可以用上述方法构造网格点坐标数据;

但是如果是一个 (256, 100) 的整数矩阵网格,要怎样构造数据呢?

方法1 : 将 x 轴上的 100 个整数点组成的行向量,重复 256 次,构成 shape(256,100) 的 X 矩阵;将 y 轴上的 256 个整数点组成列向量, 重复 100 次构成 shape(256,100) 的 Y 矩阵

显然方法1 的数据构造过程很繁琐, 也不方便调用, 那么有没有更好的办法呢?
of course!!! 那么 meshgrid() 就显示出它的作用了

使用 meshgrid 方法,你只需要构造一个表示 x 轴上的坐标的向量和一个表示 y 轴上的坐标的向量; 然后作为参数给到 meshgrid(), 该函数就会返回相应维度的两个矩阵;

例如,你想构造一个 2 行 3 列的矩阵网格点, 那么 x 生成一个 shape(3,) 的向量, y 生成一个 shape(2,) 的向量, 将 x, y 传入 meshgrid(), 最后返回的 X , Y 矩阵的 shape(2,3)

示例2,使用 meshgrid() 生成 step1 中的网格点矩阵

x = np.array([0, 0.5, 1])
y = np.array([0,1])

xv,yv = np.meshgrid(x, y)
print("xv的维度:{},shape:{}".format(xv.ndim, xv.shape))
print("yv的维度:{},shape:{}".format(yv.ndim, yv.shape))

plt.plot(xv, yv, 'o--')
plt.grid(True)
plt.show()

Numpy中的meshgrid()函数

示例3,生成一个20行30列的网格点矩阵

x = np.linspace(0,500,30)
print("x的维度:{},shape:{}".format(x.ndim, x.shape))
print(x)
y = np.linspace(0,500,20)
print("y的维度:{},shape:{}".format(y.ndim, y.shape))
print(y)

xv,yv = np.meshgrid(x, y)
print("xv的维度:{},shape:{}".format(xv.ndim, xv.shape))
print("yv的维度:{},shape:{}".format(yv.ndim, yv.shape))

plt.plot(xv, yv, '.')
plt.grid(True)
plt.show()

Numpy中的meshgrid()函数

step3. 详细解读 meshgrid() 的官网定义;
numpy.meshgrid(*xi, **kwargs)
Return coordinate matrices from coordinate vectors.
根据输入的坐标向量生成对应的坐标矩阵

Parameters:
  x1, x2,…, xn : array_like
    1-D arrays representing the coordinates of a grid.
  indexing : {‘xy’, ‘ij’}, optional
    Cartesian (‘xy’, default) or matrix (‘ij’) indexing of output. See Notes for more details.
  sparse : bool, optional
    If True a sparse grid is returned in order to conserve memory. Default is False.
  copy : bool, optional
    If False, a view into the original arrays are returned in order to conserve memory.
    Default is True. Please note that sparse=False, copy=False will likely return non-contiguous arrays.
    Furthermore, more than one element of a broadcast array may refer to a single memory location.
    If you need to write to the arrays, make copies first.
Returns:
  X1, X2,…, XN : ndarray
    For vectors x1, x2,…, ‘xn’ with lengths Ni=len(xi) ,
    return (N1, N2, N3,…Nn) shaped arrays if indexing=’ij’
    or (N2, N1, N3,…Nn) shaped arrays if indexing=’xy’
    with the elements of xi repeated to fill the matrix along the first dimension for x1, the second for x2 and so on.

针对 indexing 参数的说明:
indexing 只是影响 meshgrid() 函数返回的矩阵的表示形式,但并不影响坐标点

x = np.array([0, 0.5, 1])
y = np.array([0,1])

xv,yv = np.meshgrid(x, y)
print("xv的维度:{},shape:{}".format(xv.ndim, xv.shape))
print("yv的维度:{},shape:{}".format(yv.ndim, yv.shape))
print(xv)
print(yv)

plt.plot(xv, yv, 'o--')
plt.grid(True)
plt.show()

Numpy中的meshgrid()函数

 

x = np.array([0, 0.5, 1])
y = np.array([0,1])

xv,yv = np.meshgrid(x, y,indexing='ij')
print("xv的维度:{},shape:{}".format(xv.ndim, xv.shape))
print("yv的维度:{},shape:{}".format(yv.ndim, yv.shape))
print(xv)
print(yv)

plt.plot(xv, yv, 'o--')
plt.grid(True)
plt.show()

Numpy中的meshgrid()函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132138.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10开始键没反应解决方法「建议收藏」

    win10开始键没反应解决方法「建议收藏」win10开始键没反应解决方法具体方法如下:1、打开运行窗口。windows7系统:通过“开始”菜单进入。点击“开始”菜单,从打开的菜单中依次点击“所有程序”>“附件”>“运行”来打开“运行”窗口。windows10系统:右击屏幕左下角win标志,在弹出的菜单中找到“运行”,点击进入运行窗口2、在搜索窗口输入“regedit”,打开注册表编辑器。3、在在注册表“HKEY_CLASSES_ROOT”主键下找到“lnkfile”字符串值项。打开它。4、在右侧右击它,会出现一个菜单

    2022年5月4日
    43
  • navicat15永久注册激活码(最新序列号破解)

    navicat15永久注册激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    5.5K
  • virus.win32.parite.h病毒查杀

    virus.win32.parite.h病毒查杀virus.win32.parite.h病毒查杀第一步,病毒不会无缘无故的出现,一般是有病毒下载器(通常蛰伏在流氓软件中),或者是有后门病毒将这些病毒下载下来。用优化大师或金山或360都行,流氓软件清除工具(360插件扫描和***查杀中部分选项,注意不要一下子处理威胁,要选择流氓软件、后门项目处理)第二步,要下载两个专杀(绿盟有打包的,也可以自己一个个找)1、北信源Win32…

    2022年7月25日
    7
  • SSM项目问题总结

    SSM项目问题总结1.导入一个新项目报错Theimportjavax.servlet.http.HttpServletRequestcannotberesolvedhttps://blog.csdn.net/nokia_lc/article/details/522047662.org.springframework.beans.factory.BeanDefinitionStoreException:…

    2022年6月21日
    24
  • 网络传真和传真服务器[通俗易懂]

    网络传真和传真服务器[通俗易懂]传真机自1906年在德国推出以来,到今天已走过一百多年的历史,传真的形式也从最早的机械传真、光电传真、数字传真发展到今天的电子传真、电脑传真、网络传真、无纸传真、传真系统、传真服务器、传真软件、传真卡等。   所谓电子传真机(包括各种类型的网络传真机、电脑传真机、数码传真机、无纸传真机、传真软件、传真系统、传真服务器等,下同),就是通过电脑收发传真。     在发送传真前,自动检

    2022年6月28日
    29
  • docker 命令大全_常用docker命令

    docker 命令大全_常用docker命令文章目录Docker——Docker常用命令1、后台启动2、查看日志3、查看进程4、查看元数据5、在运行的容器中执行命令6、连接到正在执行的容器7、数据拷贝Docker——Docker常用命令1、后台启动语法:dockerrun-d镜像名使用实例:以后台方式运行一个容器:dockerrun-dcentos注意:当我们以后台方式启动一个容器时,就必须要有一个前台进程,否则docker容器发现没有应用,就会自动停止。如上图所示,我们在以后台方式运行一个容器后,再查看当

    2022年9月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号