如何将一个元组列表转换为一个numpy数组?

mec1mxoz  于 2023-05-29  发布在  其他
关注(0)|答案(3)|浏览(153)

我有一个这样的列表:

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

我想把它转换成一个numpy数组,并保持数组项类型为tuple:

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

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

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

并且项目类型已经从tuple更改为numpy.ndarray,那么我指定了项目类型

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

这给出:

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

但是item类型不是tuple而是numpy.void,所以问题是:

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

46scxncf1#

你可以有一个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
nqwrtyyt

nqwrtyyt2#

出于某种原因,如果您正在寻找一行代码,则不能简单地这样做(即使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)添加到上一行的末尾来强制转换回一个对象)。

xn1cxnb4

xn1cxnb43#

刚刚发现Pandas有办法解决这个问题。您可以使用它们的MultiIndex类来创建元组数组,因为所有pandas Indexes都是 Package 的1-D numpy数组。这就像在元组列表上调用Index构造函数一样简单。

>>> import pandas as pd
>>> tups = [(1, 2), (1, 3)]
>>> tup_array = pd.Index(tups).values
>>> print(type(tup_array), tup_array)
<class 'numpy.ndarray'> [(1, 2) (1, 3)]

相关问题