这篇文章主要介绍“np.meshgrid中的indexing参数问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“np.meshgrid中的indexing参数问题如何解决”文章能帮助大家解
这篇文章主要介绍“np.meshgrid中的indexing参数问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“np.meshgrid中的indexing参数问题如何解决”文章能帮助大家解决问题。
meshgrid函数在二维空间中可以简单地理解为将x轴与y轴的每个位置的坐标关联起来形成了一个网格,我们知道空间中的点是由坐标确定的,因此,当x与y关联起来后,我们便可以给与某个点某个特定值并画出对应的图像。具体的可以百度一下,会有很多较为详细的介绍。
这里我想要着重的说一下二维以及三维的meshgrid
的参数indexing
的问题。
import numpy as npclass 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 npclass 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
轴,我们在编程中通常很少使用的这种坐标系。但是它也有自己的优势,这里不进一步说明。
进一步我们讨论三维的情况,代码如下:
import numpy as npclass 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)
,即沿着x
轴1
个元素,沿着y
轴2
个元素,沿着z
轴3
个元素。再来看一下我们使用meshgrid
方法生成三维网格的情况。
import numpy as npclass 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, Zmain = 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,Z
的shape
均为(2, 1, 3)
,这对应的是沿着x
轴3
个元素,沿着y
轴1
个元素,沿着z
轴2
个元素。突然感觉有些混乱,不符合我们之前想要得到的x,y,z
的排列顺序,为了能够得到正常的排列顺序,我们可以使用如下代码:
import numpy as npclass 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, Zmain = 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参数问题如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。
--结束END--
本文标题: np.meshgrid中的indexing参数问题如何解决
本文链接: https://lsjlt.com/news/351448.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0