我们有一个元组列表,格式为(年,值):
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)]])
那么,将元组列表转换为二维数组有什么魔力呢?
如果想要二维结果,只需使用^{} ,而不是
asarray
:注意,这将使两个列都成为浮点数据类型。不可能在每个列中都有具有不同数据类型的2D numpy数组。如果你想这么做,我认为熊猫有一个办法:尽管我对熊猫没有任何经验。
使用numpy唯一能做的就是拥有一个1D数组的“object”类型,每个元素都是一个元组——但这就是使用
asarray
所能做的。如果我正确理解您所需的输出,您可以使用^{}
相关问题 更多 >
编程相关推荐