Python - numpy mgrid和reshape

时间:2017-02-17 22:12:07

标签: numpy

有人可以向我解释一下这段代码的第二行是什么吗?

objp = np.zeros((48,3), np.float32)
objp[:,:2] = np.mgrid[0:8,0:6].T.reshape(-1,2)

有人可以向我解释一下代码的np.mgrid [0:8,0:6]部分到底是做什么的,以及代码的T.reshape(-1,2)部分到底是做什么的? / p>

谢谢,干得好!

2 个答案:

答案 0 :(得分:4)

查看这些内容的最简单方法是为mgrid使用较小的值:

In [11]: np.mgrid[0:2,0:3]
Out[11]:
array([[[0, 0, 0],
        [1, 1, 1]],

       [[0, 1, 2],
        [0, 1, 2]]])

In [12]: np.mgrid[0:2,0:3].T  # (matrix) transpose
Out[12]:
array([[[0, 0],
        [1, 0]],

       [[0, 1],
        [1, 1]],

       [[0, 2],
        [1, 2]]])

In [13]: np.mgrid[0:2,0:3].T.reshape(-1, 2)  # reshape to an Nx2 matrix
Out[13]:
array([[0, 0],
       [1, 0],
       [0, 1],
       [1, 1],
       [0, 2],
       [1, 2]])

然后objp[:,:2] =objp的第0列和第1列设置为此结果。

答案 1 :(得分:2)

第二行创建一个multi-dimensional mesh gridtransposesreshapes,以便它代表两列并将其插入到objp数组的前两列中。

<强>故障:

np.mgrid [0:8,0:6]创建以下mgrid:

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

       [[0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5]]])

.T转置矩阵,然后.reshape(-1,2)将其重新整形为两个两列数组形状。然后,这两列是正确的形状,以替换原始数组中的两列。