Python 如何使用数据类型(datetime、float)进行numpy重新排列?

Python 如何使用数据类型(datetime、float)进行numpy重新排列?,python,numpy,recarray,Python,Numpy,Recarray,假设我有一些简单的数据 y = [[datetime.datetime( 2012,1,1,1,1), 2.1], [datetime.datetime( 2012,1,1,1,2), -3.1], [datetime.datetime( 2012,1,1,1,3), 0.1]] 我想要一个与之对应的numpy记录数组。看来我应该能做到这一点: np.rec.array( y, dtype=[('timestamp', object),('x','f')] ) 还是这个

假设我有一些简单的数据

y = [[datetime.datetime( 2012,1,1,1,1), 2.1], 
     [datetime.datetime( 2012,1,1,1,2), -3.1],
     [datetime.datetime( 2012,1,1,1,3), 0.1]]
我想要一个与之对应的numpy记录数组。看来我应该能做到这一点:

np.rec.array( y, dtype=[('timestamp', object),('x','f')] )
还是这个

np.rec.array( y, dtype=[('timestamp', '|O8'),('x','f')] )
或者这个

np.rec.array( y, dtype=[('timestamp', 'V'),('x','f')] )
但它们中的每一个都返回一个错误

ValueError: Setting void-array with object members using buffer.


那么,假设这是可能的,我该如何设置呢?

您可以使用元组而不是列表来记录:

>> y = [(datetime.datetime( 2012,1,1,1,1), 2.1), 
...     (datetime.datetime( 2012,1,1,1,2), -3.1),
...     (datetime.datetime( 2012,1,1,1,3), 0.1)]
>> np.rec.array(y, dtype=[('timestamp', object), ('x','f')])
rec.array([(datetime.datetime(2012, 1, 1, 1, 1), 2.0999999046325684),
           (datetime.datetime(2012, 1, 1, 1, 2), -3.0999999046325684),
           (datetime.datetime(2012, 1, 1, 1, 3), 0.10000000149011612)],
dtype=[('timestamp', '|O8'), ('x', '<f4')])
y=[(datetime.datetime(2012,1,1,1,1),2.1), …(datetime.datetime(2012,1,1,2),-3.1), …(datetime.datetime(2012,1,1,3),0.1)] >>数组(y,dtype=[('timestamp',object),('x','f')) rec.array([(datetime.datetime(2012,1,1,1,1),2.0999909046325684), (datetime.datetime(2012,1,1,2),-3.0999909046325684), (datetime.datetime(2012,1,1,3),0.1000000149011612)],
dtype=[('timestamp','O8'),('x','Holy smokes,就是这么简单。谢谢!
>> y = [(datetime.datetime( 2012,1,1,1,1), 2.1), 
...     (datetime.datetime( 2012,1,1,1,2), -3.1),
...     (datetime.datetime( 2012,1,1,1,3), 0.1)]
>> np.rec.array(y, dtype=[('timestamp', object), ('x','f')])
rec.array([(datetime.datetime(2012, 1, 1, 1, 1), 2.0999999046325684),
           (datetime.datetime(2012, 1, 1, 1, 2), -3.0999999046325684),
           (datetime.datetime(2012, 1, 1, 1, 3), 0.10000000149011612)],
dtype=[('timestamp', '|O8'), ('x', '<f4')])