有人可以向我解释一下这段代码的第二行是什么吗?
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>
谢谢,干得好!
答案 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 grid,transposes,reshapes,以便它代表两列并将其插入到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)将其重新整形为两个两列数组形状。然后,这两列是正确的形状,以替换原始数组中的两列。