np.ogrid,np.mgrid与np.meshgrid

2019-05-28  本文已影响0人  热爱生活的大川

1. ogrid

调取方式如下

X,Y=np.ogrid[0:2,0:3]

print(X.shape)
print(X)

print(Y.shape)
print(Y)

# 输出
(2, 1)
[[0]
 [1]]
(1, 3)
[[0 1 2]]

np.ogrid可以有多个切片索引,结果也对应多个。
结果产生逻辑为

  1. 统一维度总数,如上X与Y均变为2维;
  2. 令第n个结果的值按照第n个切片索引可变,其他维度均为1,如X除第一个维度外其他维度均只有1个,即X[x,y]中y只能为0。

2. mgrid

与np.ogrid类似,只是填充了其他维度,调取方式如下

X,Y=np.mgrid[0:2,0:3]

print(X.shape)
print(X)

print(Y.shape)
print(Y)

# 输出
(2, 3)
[[0 0 0]
 [1 1 1]]
(2, 3)
[[0 1 2]
 [0 1 2]]

np.mgrid可以有多个切片索引,结果也对应多个。
结果产生逻辑为

  1. 统一维度,如X和Y均变为2行3列
  2. 令第n个结果的值按照第n个切片索引可变,其他维度不变(第n个维度变化时数值变化,第n个维度不变其他维度变化时数值不变)
    以第1个结果X为例,变化第1个维度,X[0,0]和X[1,0]值是不一样的;而固定第一个维度变化第2个维度,X[0,0]、X[0,1]和X[0,2]值都是一样的。
    与ogrid相比,填充了其他维度。

3. meshgrid

首先要理解下绘图时所说的坐标点阵和内存中存储的二维数组的不同

举例:

#meshgrid函数调用,生成两个3行2列的二维数组
X1,Y1=np.meshgrid(np.arange(0,2,1),np.arange(0,3,1))
print(X1.shape)
print(X1)
#mgrid切片器调用,生成两个2行3列的二维数组
X2,Y2=np.mgrid[0:2,0:3]
print(X2.shape)
print(X2)
#等价于X2,Y2=np.meshgrid(np.arange(0,3,1),np.arange(0,2,1),indexing='ij')

#输出
(3, 2)
[[0 1]
 [0 1]
 [0 1]]
(2, 3)
[[0 0 0]
 [1 1 1]]

则对于坐标(x,y),有
X1[y,x]=X2[x,y]
Y1[y,x]=Y2[x,y]

4. np.mgrid与np.meshgrid的不同

上一篇 下一篇

猜你喜欢

热点阅读