如何将datetime值放入numpy数组?

时间:2013-11-08 22:17:53

标签: arrays python-2.7 numpy python-datetime

我正在学习python,所以请耐心等待。我一直试图获得一个约会时间 变成一个numpy数组,但一直无法弄清楚如何。我需要计算以后每个索引的时间差异,所以我不知道是否应该将datetime变量放入数组中,或者将其转换为其他数据类型。我收到错误:

'NoneType' object does not support item assignment

我的dtype变量是否构造正确? This没有说明日期时间类型。

import numpy as np
from liblas import file

f = file.File(project_file, mode = 'r')
num_points = int(f.__len())
# dtype should be [float, float, float, int, int, datetime]
dt = [('x', 'f4'), ('y', 'f4'), ('z', 'f4'), ('i', 'u2'), ('c', 'u1'), ('time', 'datetime64')]
xyzict = np.empty(shape=(num_points, 6), dtype = dt)

# Load all points into numpy array
counter = 0
for p in f:
    newrow = [p.x, p.y, p.z, p.i, p.c, p.time]
    xyzict[counter] = newrow     
    counter += 1

提前致谢

编辑:我应该注意,我计划在继续之前按日期对数组进行排序。

p.time采用以下格式:

>>>p.time
datetime.datetime(1971, 6, 26, 19, 37, 12, 713269)
>>>str(p.time)
'1971-06-26 19:37:12.713275'

1 个答案:

答案 0 :(得分:4)

我真的不明白你是如何从文件中获取datetime对象的,或者p是什么意思,但假设你有一个元组列表(不是列表,请参阅我上面的评论),您可以一步完成设置:

dat = [(.5, .5, .5, 0, 34, datetime.datetime(1971, 6, 26, 19, 37, 12, 713269)),
       (.3, .3, .6, 1, 23, datetime.datetime(1971, 6, 26, 19, 34, 23, 345293))]

dt = [('x', 'f4'), ('y', 'f4'), ('z', 'f4'), ('i', 'u2'), ('c', 'u1'), ('time', 'datetime64[us]')]

datarr = np.array(dat, dt)

然后您可以按名称访问字段:

>>> datarr['time']
array(['1971-06-26T15:37:12.713269-0400', '1971-06-26T15:34:23.345293-0400'], dtype='datetime64[us]')

或按字段排序:

>>> np.sort(datarr, order='time')
array([ (0.3, 0.3, 0.6, 1, 23, datetime.datetime(1971, 6, 26, 19, 34, 23, 345293)),
        (0.5, 0.5, 0.5, 0, 34, datetime.datetime(1971, 6, 26, 19, 37, 12, 713269))], 
  dtype=[('x', '<f4'), ('y', '<f4'), ('z', '<f4'), ('i', '<u2'), ('c', 'u1'), ('time', '<M8[us]')])