14

我有一个这样的列表:

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? 
4

2 回答 2

19

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

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
于 2017-11-20T10:12:28.413 回答
4

出于某种原因,如果您正在寻找一行代码,则不能简单地执行此操作(即使 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)如果你愿意,你可以通过添加到上面一行的末尾来转换回一个对象)。

于 2021-02-17T19:29:23.603 回答