【问题标题】:how to convert numpy array into tuple如何将numpy数组转换为元组
【发布时间】:2018-04-10 15:24:33
【问题描述】:

我需要像这样转换数组:

 [[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),]

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

         ( 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 方法够用吗?
  • 请参阅stackoverflow.com/q/49838872/901925 了解更新的类似问题。似乎海报想要一个结构化数组,而不仅仅是一个元组列表。

标签: python numpy tuples


【解决方案1】:

数组方法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 方法开始,然后进行任何列表到元组的转换。

【讨论】:

    【解决方案2】:

    下面是假设您不希望最终对象是 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]
    

    【讨论】:

      【解决方案3】:

      像这样使用 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)
      

      【讨论】:

        【解决方案4】:

        如果你更喜欢列表推导而不是 map():

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

        【讨论】:

          猜你喜欢
          • 2021-12-18
          • 2012-04-18
          • 2018-05-03
          • 1970-01-01
          • 2023-02-03
          • 1970-01-01
          • 2018-04-19
          • 1970-01-01
          • 2021-06-09
          相关资源
          最近更新 更多