【问题标题】:How convert a list of tupes to a numpy array of tuples?如何将元组列表转换为 numpy 元组数组?
【发布时间】:2018-05-03 12:29:48
【问题描述】:

我有一个这样的列表:

l=[(1,2),(3,4)]

我想将它转换为一个numpy数组,并将数组项类型保持为元组:

array([(1,2),(3,4)])

但是 numpy.array(l) 会给出:

array([[1,2],[3,4)]])

并且项目类型已从元组更改为numpy.ndarray,然后我指定了项目类型

numpy.array(l,numpy.dtype('float,float'))

这给出了:

 array([(1,2),(3,4)])

但是项目类型不是元组而是numpy.void,所以问题是:

 how to convert it to a numpy.array of tuple,not of numpy.void? 

【问题讨论】:

    标签: python numpy numpy-ndarray


    【解决方案1】:

    你可以有一个object dtype 的数组,让数组的每个元素都是一个元组,就像这样 -

    out = np.empty(len(l), dtype=object)
    out[:] = l
    

    示例运行 -

    In [163]: l = [(1,2),(3,4)]
    
    In [164]: out = np.empty(len(l), dtype=object)
    
    In [165]: out[:] = l
    
    In [172]: out
    Out[172]: array([(1, 2), (3, 4)], dtype=object)
    
    In [173]: out[0]
    Out[173]: (1, 2)
    
    In [174]: type(out[0])
    Out[174]: tuple
    

    【讨论】:

    • 为什么这有效但np.array([(1,2),(3,4)], dtype=object) 无效?
    【解决方案2】:

    由于某种原因,如果您正在寻找一行代码,则不能简单地执行此操作(尽管 Divakar 的回答最终给您留下了 dtype=object):

    np.array([(1,2),(3,4)], dtype=object)
    

    相反,您必须这样做:

    np.array([(1,2),(3,4)], dtype="f,f")
    

    "f,f" 向数组发出信号,表示它正在接收两个浮点数的元组(或者您可以将"i,i" 用于整数)。如果您愿意,您可以通过将.astype(object) 添加到上述行的末尾来转换回一个对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2012-08-28
      • 2018-03-16
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多