meshgrid函数在二维空间中可以简单地理解为将x轴与y轴的每个位置的坐标关联起来形成了一个网格,我们知道空间中的点是由坐标确定的,因此,当x与y关联起来后,我们便可以给与某个点某个特定值并画出对应的图像。具体的可以百度一下,会有很多较为详细的介绍。
这里我想要着重的说一下二维以及三维的meshgrid
的参数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="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
轴,我们在编程中通常很少使用的这种坐标系。但是它也有自己的优势,这里不进一步说明。
进一步我们讨论三维的情况,代码如下:
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
值来区分坐标轴了,而是统一规定了坐标轴的取法,只有对于这个坐标轴的取法深入理解,才能在之后的三维数据处理中游刃有余。