如何将numpy数组转换为元组

Kar*_*hit 3 python tuples numpy

我需要像这样转换数组:

 [[1527 1369   86   86]
  [ 573  590  709  709]
  [1417 1000   68   68]
  [1361 1194   86   86]]
Run Code Online (Sandbox Code Playgroud)

喜欢这个:

    [(726, 1219, 1281, 664),
    (1208, 1440, 1283, 1365), 
    (1006, 1483, 1069, 1421),
    (999, 1414, 1062, 1351),]
Run Code Online (Sandbox Code Playgroud)

我尝试直接使用 convert to tuple 但得到了这个:

         ( array([1527, 1369,   86,   86], dtype=int32), 
           array([573, 590, 709, 709], dtype=int32),
           array([1417, 1000,   68,   68], dtype=int32), 
           array([1361, 1194,   86,   86], dtype=int32))
           (array([701, 899, 671, 671], dtype=int32),)      
Run Code Online (Sandbox Code Playgroud)

hpa*_*ulj 5

数组方法tolist是一种将数组转换为列表的简单快捷的方法。它正确处理多个维度:

In [92]: arr = np.arange(12).reshape(3,4)
In [93]: arr
Out[93]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [94]: arr.tolist()
Out[94]: [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
Run Code Online (Sandbox Code Playgroud)

对于大多数用途,例如列表列表与元组列表或元组元组一样好。它们仅在可变性上有所不同。

但是如果你必须有一个元组,列表推导式可以很好地进行转换。

In [95]: [tuple(x) for x in arr.tolist()]
Out[95]: [(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11)]
Run Code Online (Sandbox Code Playgroud)

另一种方法[tuple(x) for x in arr]有点慢,因为它在数组上而不是在列表上迭代。它还会产生不同的结果 - 尽管您必须检查type元组元素的 才能看到这一点。

我强烈建议从tolist方法开始,然后做任何列表到元组转换。