我正在学习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'
答案 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]')])