NumPy数组列表转换

时间:2016-09-29 23:41:31

标签: python python-3.x opencv

在OpenCV 3中,函数goodFeaturesToTrack返回以下形式的数组

[[[1, 2]]
 [[3, 4]]
 [[5, 6]]
 [[7, 8]]]

将该数组转换为Python列表后,我得到了

[[[1, 2]], [[3, 4]], [[5, 6]], [[7, 8]]]

虽然这是一个列表,如果你看到它还有一对括号,当我尝试通过A [0] [1]访问一个元素时,我收到一个错误。为什么数组和列表都有这种形式?我该如何解决?

1 个答案:

答案 0 :(得分:1)

因为你有一个3d数组,第二轴有一个元素:

In [26]: A = [[[1, 2]], [[3, 4]], [[5, 6]], [[7, 8]]]

In [27]: A[0]
Out[27]: [[1, 2]]

当你想通过A[0][1]访问第二项时,它会引发一个IndexError:

In [28]: A[0][1]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-28-99c47bb3f368> in <module>()
----> 1 A[0][1]

IndexError: list index out of range

您可以使用np.squeeze()来缩小尺寸,并将数组转换为2D数组:

In [21]: import numpy as np

In [22]: A = np.array([[[1, 2]], [[3, 4]], [[5, 6]], [[7, 8]]])

In [33]: A = np.squeeze(A)

In [34]: A
Out[34]: 
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])