np.meshgrid中的indexing参数问题解决

 更新时间:2023年03月13日 09:21:38   作者:勤奋的大熊猫  
本文主要介绍了np.meshgrid中的indexing参数问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

meshgrid函数在二维空间中可以简单地理解为将x轴与y轴的每个位置的坐标关联起来形成了一个网格,我们知道空间中的点是由坐标确定的,因此,当x与y关联起来后,我们便可以给与某个点某个特定值并画出对应的图像。具体的可以百度一下,会有很多较为详细的介绍。

这里我想要着重的说一下二维以及三维的meshgrid的参数indexing的问题。

二维meshgrid函数

import numpy as np


class Debug:
    def __init__(self):
        self.x = np.arange(5)
        self.y = np.arange(5)
        
    def grid(self):
        X, Y = np.meshgrid(self.x, self.y, indexing="xy")
        return X, Y
    

main = Debug()
X, Y = main.grid()
print("The X grid is:")
print(X)
print("The Y grid is:")
print(Y)
"""
The X grid is:
[[0 1 2 3 4]
 [0 1 2 3 4]
 [0 1 2 3 4]
 [0 1 2 3 4]
 [0 1 2 3 4]]
The Y grid is:
[[0 0 0 0 0]
 [1 1 1 1 1]
 [2 2 2 2 2]
 [3 3 3 3 3]
 [4 4 4 4 4]]
"""

从上面的结果可以看出,所获取的网格对应如下图所示,横向为x轴,纵向为y轴,类似于我们在几何空间中使用的坐标系, 我们通常称之为笛卡尔坐标系(Cartesian coordinate)。在二维meshgrid网格创建命令中,笛卡尔坐标系是默认的坐标系。

在这里插入图片描述

然而在python编程中,还有一种较为常用的indexing取法,代码如下:

import numpy as np


class Debug:
    def __init__(self):
        self.x = np.arange(5)
        self.y = np.arange(5)
        
    def grid(self):
        X, Y = np.meshgrid(self.x, self.y, indexing="ij")
        return X, Y
    

main = Debug()
i, j = main.grid()
print("The i grid is:")
print(i)
print("The j grid is:")
print(j)
"""
The i grid is:
[[0 0 0 0 0]
 [1 1 1 1 1]
 [2 2 2 2 2]
 [3 3 3 3 3]
 [4 4 4 4 4]]
The j grid is:
[[0 1 2 3 4]
 [0 1 2 3 4]
 [0 1 2 3 4]
 [0 1 2 3 4]
 [0 1 2 3 4]]
"""

此时从上面的结果我们可以看出,所获取的网格对应如下图所示,纵向为i轴,横向为j轴,我们在编程中通常很少使用的这种坐标系。但是它也有自己的优势,这里不进一步说明。

在这里插入图片描述

三维meshgrid函数

进一步我们讨论三维的情况,代码如下:

import numpy as np


class Debug:
    def __init__(self):
        self.x = np.arange(3)
        self.y = np.arange(3)
        self.z = np.arange(3)
        
    def grid(self):
        X, Y, Z = np.meshgrid(self.x, self.y, self.z)
        return X, Y, Z
    

main = Debug()
X, Y, Z = main.grid()
print("The X grid is:")
print(X)
print("The Y grid is:")
print(Y)
print("The Z grid is:")
print(Z)
"""
The X grid is:
[[[0 0 0]
  [1 1 1]
  [2 2 2]]

 [[0 0 0]
  [1 1 1]
  [2 2 2]]

 [[0 0 0]
  [1 1 1]
  [2 2 2]]]
The Y grid is:
[[[0 0 0]
  [0 0 0]
  [0 0 0]]

 [[1 1 1]
  [1 1 1]
  [1 1 1]]

 [[2 2 2]
  [2 2 2]
  [2 2 2]]]
The Z grid is:
[[[0 1 2]
  [0 1 2]
  [0 1 2]]

 [[0 1 2]
  [0 1 2]
  [0 1 2]]

 [[0 1 2]
  [0 1 2]
  [0 1 2]]]
"""

由上面的结果我们可以看到,此时的坐标轴对应如下图像:

在这里插入图片描述

x轴向下,y轴向屏幕内侧,z轴向右侧,在三维图像中不再根据indexing值来区分坐标轴了,而是统一规定了坐标轴的取法,只有对于这个坐标轴的取法深入理解,才能在之后的三维数据处理中游刃有余。

特别说明

但是这里有一个问题,来看一组代码:

class Debug:
    def __init__(self):
        x = np.array([[[0],
                       [2]], [[4],
                              [6]], [[8],
                                     [10]]])
        print(x.shape)


main = Debug()
"""
(3, 2, 1)
"""

我们可以看到,输出结果为(3, 2, 1),即沿着x1个元素,沿着y2个元素,沿着z3个元素。再来看一下我们使用meshgrid方法生成三维网格的情况。

import numpy as np


class Debug:
    def __init__(self):
        self.x = np.arange(1)
        self.y = np.arange(2)
        self.z = np.arange(3)

    def grid(self):
        X, Y, Z = np.meshgrid(self.x, self.y, self.z)
        return X, Y, Z


main = Debug()
X, Y, Z = main.grid()
print("The X grid is:")
print(X.shape)
print("The Y grid is:")
print(Y.shape)
print("The Z grid is:")
print(Z.shape)
"""
The X grid is:
(2, 1, 3)
The Y grid is:
(2, 1, 3)
The Z grid is:
(2, 1, 3)
"""

我们可以看到,最终输出的X,Y,Zshape均为(2, 1, 3),这对应的是沿着x3个元素,沿着y1个元素,沿着z2个元素。突然感觉有些混乱,不符合我们之前想要得到的x,y,z的排列顺序,为了能够得到正常的排列顺序,我们可以使用如下代码:

import numpy as np


class Debug:
    def __init__(self):
        self.x = np.arange(1)
        self.y = np.arange(2)
        self.z = np.arange(3)

    def grid(self):
        X, Y, Z = np.meshgrid(self.y, self.z, self.x)
        return X, Y, Z


main = Debug()
X, Y, Z = main.grid()
print("The X grid is:")
print(X.shape)
print("The Y grid is:")
print(Y.shape)
print("The Z grid is:")
print(Z.shape)
"""
The X grid is:
(3, 2, 1)
The Y grid is:
(3, 2, 1)
The Z grid is:
(3, 2, 1)
"""

可以看到运行后我们得到了符合Python默认坐标轴习惯的网格形式,这时对应的x轴向右侧,y轴向下,z轴向屏幕里面。这个仅仅是为了理解需要,实际操作中无需进行这种坐标轴变换操作,直接使用默认的三维坐标轴方向即可。

到此这篇关于np.meshgrid中的indexing参数问题解决的文章就介绍到这了,更多相关np.meshgrid的indexing参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文搞懂Pandas数据透视的4个函数的使用

    一文搞懂Pandas数据透视的4个函数的使用

    今天主要和大家分享Pandas中四种有关数据透视的通用函数,在数据处理中遇到这类需求时,能够很好地应对,快跟随小编一起学习一下吧
    2022-06-06
  • Django细致讲解多对多使用through自定义中间表方法

    Django细致讲解多对多使用through自定义中间表方法

    我们在开发网站的时候,无可避免的需要设计实现网站的用户系统,我们需要实现包括用户注册、用户登录、用户认证、注销等功能,Django作为完美主义终极框架,它默认使用auth_user表来存储用户数据,下面我们来看看Django多对多使用through自定义中间表
    2022-06-06
  • Python函数sort()与sorted()的区别及key=lambda x:x[]的理解

    Python函数sort()与sorted()的区别及key=lambda x:x[]的理解

    这篇文章主要介绍了Python函数sort()与sorted()的区别及key=lambda x:x[]的理解方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python flask 框架使用flask-login 模块的详细过程

    Python flask 框架使用flask-login 模块的详细过程

    Flask-Login 是一个 Flask 模块,可以为 Flask 应用程序提供用户登录功能,这篇文章主要介绍了Python flask 框架使用 flask-login 模块,需要的朋友可以参考下
    2023-01-01
  • python3.5 email实现发送邮件功能

    python3.5 email实现发送邮件功能

    这篇文章主要为大家详细介绍了python3.5 email实现发送邮件功能,包含txt、图片、HTML、附件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Python使用tkinter模块实现推箱子游戏

    Python使用tkinter模块实现推箱子游戏

    这篇文章主要介绍了Python使用tkinter模块实现推箱子游戏,主要分享两点,第一就是这个程序的实现过程,第二点就是我在编写过程中的一些思考。本文通过实例代码给大家介绍的非常详细,需要的朋友参看下吧
    2019-10-10
  • python使用html2text库实现从HTML转markdown的方法详解

    python使用html2text库实现从HTML转markdown的方法详解

    这篇文章主要介绍了python使用html2text库实现从HTML转markdown的方法,需要的朋友可以参考下
    2020-02-02
  • python pygame实现打砖块游戏

    python pygame实现打砖块游戏

    这篇文章主要为大家详细介绍了python pygame实现打砖块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • django 实现后台从富文本提取纯文本

    django 实现后台从富文本提取纯文本

    这篇文章主要介绍了django 实现后台从富文本提取纯文本,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Pycharm5个非常有用的方法技巧

    Pycharm5个非常有用的方法技巧

    这篇文章主要介绍了Pycharm5个非常有用的方法技巧,PyCharm 是一款非常强大的编写 python 代码的工具。掌握一些小技巧能成倍的提升写代码的效率,本篇介绍几个经常使用的小技巧,需要的小伙伴可以参考一下
    2022-07-07

最新评论