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
值来区分坐标轴了,而是统一规定了坐标轴的取法,只有对于这个坐标轴的取法深入理解,才能在之后的三维数据处理中游刃有余。