繁体   English   中英

如何将numpy数组转换为元组

[英]how to convert numpy array into tuple

我需要这样转换数组:

 [[1527 1369   86   86]
  [ 573  590  709  709]
  [1417 1000   68   68]
  [1361 1194   86   86]]

喜欢这个:

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

我尝试直接使用convert转换为元组,但是得到了:

         ( 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),)      

数组方法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]]

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

但是,如果您必须有一个元组,则列表理解可以很好地进行转换。

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

另一种选择[tuple(x) for x in arr]要慢一些,因为它是在数组上而不是在列表上进行迭代。 它也产生不同的结果-尽管您必须检查元组元素的type才能看到。

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

如何使用像这样的tuble和map函数:

import numpy
numpy_arr = numpy.array(((1527, 1369,   86,   86),(573 , 590 , 709,  709)))
converted_list = tuple(map(tuple,numpy_arr)) # as list
converted_arr = map(tuple,numpy_arr) #as array
print(converted_arr)

假设您不希望最终对象成为numpy对象,则以下函数如下。

def fun(var):
  a=[]
  for i in var:
    a.append(tuple(i))
  return a

如果你想一行

def fun(var):
  return [tuple(i) for i in var]

如果您更喜欢列表理解而不是map():

a = numpy.random.uniform(0,1,size=(4,4))
a_tuple_list = [tuple(row) for row in a]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM