转换为numpy数组的元组列表

问题描述:

我有一个元组列表,其中一个元组是一个对象,另一个是通用的。当我运行np.asarray(list_in)时,结果是一个二维数组,其中的元组连续转换。不过,我想获得由元组组成的一维数组。转换为numpy数组的元组列表

我能通过一个dtype迫使它和它的作品很好,如果我尝试这个简约例如

a = [(1,2),(3,4)] 
b = np.asarray(a,dtype=('float,float')) 
print b 
[(1., 2.) (3., 4.)] 

但是我怎么取列表的第一个元素,构建一个适当的dtype出来。 type(list_in[0])返回tuple并将此传递给asarray不起作用。

+2

对象D型数组什么是正确的* * D型?你为什么没有得到你所期待的 - 你期望*? –

+0

我假设你想让dtype成为每个元素类型的元组? –

+0

可以说'(MyObject,float)',但它也可以是'(MyObject,anotherObject)'。它被编码在列表的第一个元素中 –

随着元组的列表可以让3种阵列:

In [420]: a = [(1,2),(3,4)] 

二维数组,与D型与输入推断(但它也可以被指定为类似浮动)。输入大小匹配。

In [421]: np.array(a) 
Out[421]: 
array([[1, 2], 
     [3, 4]]) 

结构化数组。 1d有2个字段。按名称进行字段索引。输入必须是元组的列表(未列出的列表):

In [422]: np.array(a, dtype='i,i') 
Out[422]: 
array([(1, 2), (3, 4)], 
     dtype=[('f0', '<i4'), ('f1', '<i4')]) 
In [423]: _['f0'] 
Out[423]: array([1, 3], dtype=int32) 

在结构化阵列,输入和显示使用元组,但数据实际上并没有被存储为元组。值被打包为字节 - 在这种情况下,8个字节表示2个整数。

对象数组。这是元组内容的1d。内容可以是其他任何东西。这是一个增强/降低清单。

In [424]: A = np.empty((2,), dtype=object) 
In [425]: A[:] = a 
In [426]: A 
Out[426]: array([(1, 2), (3, 4)], dtype=object) 
In [427]: A.shape 
Out[427]: (2,) 
In [428]: A[1] 
Out[428]: (3, 4) 

Out[428]是一个实际的元组。试图修改它,A[1][0]=30,引发错误。

在这最后一种情况下A = np.empty(2, dtype=tuple)做同样的事情。除了整数,浮点数,字符串等以外的任何东西都被“转换”为“对象”。

简单地指定对象dtype并没有帮助。结果是2d与数字元素(但存储为对象指针)。

In [429]: np.array(a, dtype=object) 
Out[429]: 
array([[1, 2], 
     [3, 4]], dtype=object) 
In [430]: _.shape 
Out[430]: (2, 2) 

更多关于做在

numpy ravel on inconsistent dimensional object

+0

谢谢。这实际上起作用。有点奇怪,numpy行为如此奇怪 –

+0

@RaduIonescu,'numpy'主要是一个多维数值数组工具。 Python已经处理了不同对象的列表,比如元组。 'numpy'对象数组不会增加很多(如果有的话)计算能力。 – hpaulj

+0

问题是我在执行一些切片后转换为列表并希望保留输入列表 –