mgrid

返回密集的多维”网格“实例

用法:np.mgrid[第1维, 第2维, 第3维...]

维度中的写法为a:b:c

  1. a,起始索引
  2. b,结束索引
  3. c,步长
    1. 如果为实数,表示间隔。区间为[a, b),左闭右开。
    2. 如果为复数,表示个数。区间为[a, b],左闭右闭。

网格,顾名思义,就是创建对应点集,下面举例来说明这一点

创建一个一维的索引

1
2
np.mgrid[0:10]
# [0 1 2 3 4 5 6 7 8 9]

一维跟arange()其实是一样的,这里就不做过多的介绍了

创建一个二维的索引

1
2
3
4
5
6
7
8
9
np.mgrid[0:3,0:3]

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

其实就是创建了点集

  • (0, 0), (0, 1), (0, 2)
  • (1, 0), (1, 1), (1, 2)
  • (2, 0), (2, 1), (2, 2)

大概意思就是,第一维所有点映射到二维所有的点。就是所有的一维和二维能形成的全部的点

创建一个三维的索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
np.mgrid[0:2, 0:2, 0:2]
# [[[[0 0]
# [0 0]]
# [[1 1]
# [1 1]]]
#
# [[[0 0]
# [1 1]]
# [[0 0]
# [1 1]]]
#
# [[[0 1]
# [0 1]]
# [[0 1]
# [0 1]]]]

其实就是创建了点集

(0, 0, 0), (0, 0,1)

(0, 1, 0), (0, 1,1)

(1, 0, 0), (1, 0,1)

(1, 1, 0), (1, 1,1)

一维,二维,三维能形成的所有的点

推到到N维

实质上就是创建N维所有能形成的点

需要注意的是:在所有的例子中没有使用复数的步长,但是要知道的是复数的步长代表将a,b形成的区域等分成若干份,取对应的值,跟实数的每个数相隔的距离不同。

ogrid

返回开放的多维”网格“的实例

该方法跟mgrid很类似,但不是形成所有的点,而是只形成对应的数据

一维

1
2
np.ogrid[0:10]
# [0 1 2 3 4 5 6 7 8 9]

与上面的一样,没啥好说的。

二维

1
2
3
4
np.ogrid[0:3, 0:3]
# [array([[0],
# [1],
# [2]]), array([[0, 1, 2]])]

一共两维,有几维就有几个array,第一个的数据在第一维度,第二个的数据在第二维度,仅仅只有自己维度有数据,推理到多维是一样的。

所以,该方法一般用来创建离散点集或者是离散多个多维数组使用。

评论