转换为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不起作用。
随着元组的列表可以让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行为如此奇怪 –
@RaduIonescu,'numpy'主要是一个多维数值数组工具。 Python已经处理了不同对象的列表,比如元组。 'numpy'对象数组不会增加很多(如果有的话)计算能力。 – hpaulj
问题是我在执行一些切片后转换为列表并希望保留输入列表 –
对象D型数组什么是正确的* * D型?你为什么没有得到你所期待的 - 你期望*? –
我假设你想让dtype成为每个元素类型的元组? –
可以说'(MyObject,float)',但它也可以是'(MyObject,anotherObject)'。它被编码在列表的第一个元素中 –