在优化方法中将numpy ndarray转换为元组的元组

时间:2018-08-16 12:56:27

标签: python numpy

我有numpy ndarray,这是opencv findContours()的结果。
我想将结果的每个元素从numpy数组有效地转换为元组的元组。
尝试了tolist(),asarray()等,但没有一个给我确切的结果。

示例

numpy数组:

    [[[191 307]]

     [[190 308]]

     [[181 308]]]

到元组的元组:

((191,307),(190,308),(181,308))

更新
tuple(elements[0])返回

(array([[191 ,307]], dtype=int32),array([[190, 308]], dtype=int32),array([[181,308]], dtype=int32))

2 个答案:

答案 0 :(得分:1)

In [9]: a = numpy.array([[[191, 307]],
   ...:                  [[190, 308]],
   ...:                  [[181, 308]]])

In [10]: tuple(tuple(row[0]) for row in a)
Out[10]: ((191, 307), (190, 308), (181, 308))

答案 1 :(得分:0)

您的数组是3d:

In [356]: a.shape
Out[356]: (3, 1, 2)

如果删除中间尺寸,则很容易迭代其余尺寸:

In [357]: tuple(tuple(i) for i in a[:,0,:])
Out[357]: ((191, 307), (190, 308), (181, 308))

如果不必是元组,那么tolist就足够了:

In [358]: a[:,0,:].tolist()
Out[358]: [[191, 307], [190, 308], [181, 308]]