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

Ale*_*uya 4 python numpy numpy-ndarray

我有一个这样的清单:

l=[(1,2),(3,4)]
Run Code Online (Sandbox Code Playgroud)

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

array([(1,2),(3,4)])
Run Code Online (Sandbox Code Playgroud)

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

array([[1,2],[3,4)]])
Run Code Online (Sandbox Code Playgroud)

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

numpy.array(l,numpy.dtype('float,float'))
Run Code Online (Sandbox Code Playgroud)

这给出了:

 array([(1,2),(3,4)])
Run Code Online (Sandbox Code Playgroud)

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

 how to convert it to a numpy.array of tuple,not of numpy.void? 
Run Code Online (Sandbox Code Playgroud)

Sup*_*rah 8

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

np.array([(1,2),(3,4)], dtype=object)
Run Code Online (Sandbox Code Playgroud)

相反,你必须这样做:

np.array([(1,2),(3,4)], dtype="f,f")
Run Code Online (Sandbox Code Playgroud)

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


Div*_*kar 6

您可以拥有一个objectdtype 数组,让该数组的每个元素成为一个元组,如下所示-

out = np.empty(len(l), dtype=object)
out[:] = l
Run Code Online (Sandbox Code Playgroud)

样品运行-

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
Run Code Online (Sandbox Code Playgroud)

  • 为什么它可以工作,但 `np.array([(1,2),(3,4)], dtype=object)` 却不能? (2认同)