[英]Converting a List of Tuples to numpy array results in single dimension
我们有一个表格列表(年份,价值):
splist
[(2002, 10.502535211267606),
(2003, 10.214794520547946),
(2004, 9.8115789473684227),
..
(2015, 9.0936585365853659),
(2016, 9.2442725379351387)]
目的是将元组列表转换为二维numpy数组。 但是,使用np.asarray
的已发布答案会保留单个维度:
dt = np.dtype('int,float')
spp = np.asarray(splist,dt)
spp
array([(2002, 10.502535211267606), (2003, 10.214794520547946),
(2004, 9.811578947368423), (2005, 9.684155844155844),
..
(2014, 9.438987341772153), (2015, 9.093658536585366),
(2016, 9.244272537935139)],
dtype=[('f0', '<i8'), ('f1', '<f8')])
在查看输出的尺寸时,这一点变得清晰:
In [155]: spp.shape
Out[155]: (15,)
我们想要什么:
array([[(2002, 10.502535211267606)],
[(2003, 10.214794520547946)],
..
[(2014, 9.438987341772153)],
[(2015, 9.093658536585366)],
[(2016, 9.244272537935139)]])
那么什么是元组的列表转换为二维数组的魔力?
如果你想要一个二维结果,只需使用np.array
,而不是asarray
:
>>> a = [(2002, 10.502535211267606),
... (2003, 10.214794520547946),
... (2004, 9.8115789473684227),
... (2015, 9.0936585365853659),
... (2016, 9.2442725379351387)]
>>> np.array(a)
array([[ 2002. , 10.50253521],
[ 2003. , 10.21479452],
[ 2004. , 9.81157895],
[ 2015. , 9.09365854],
[ 2016. , 9.24427254]])
>>> np.array(a).shape
(5, 2)
请注意,这将使两列浮点dtype。 在每列中都不可能有一个具有不同dtypes的2D numpy数组。 如果你想这样做 ,我觉得熊猫有办法:虽然我没有与任何大熊猫的经验。
numpy唯一可以做的就是拥有一个“对象”类型的一维数组,每个元素都是一个元组 - 但这就是你已经拥有的asarray
。
如果我正确理解了您想要的输出,您可以使用numpy.reshape
>>> spp = np.asarray(splist, dt)
>>> spp
array([(2002, 10.502535211267606),
(2003, 10.214794520547946),
(2004, 9.811578947368423),
(2015, 9.093658536585366),
(2016, 9.244272537935139)],
dtype=[('f0', '<i4'), ('f1', '<f8')])
>>> np.reshape(spp, (spp.size, 1))
array([[(2002, 10.502535211267606)],
[(2003, 10.214794520547946)],
[(2004, 9.811578947368423)],
[(2015, 9.093658536585366)],
[(2016, 9.244272537935139)]],
dtype=[('f0', '<i4'), ('f1', '<f8')])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.