当我追加时,Numpy错误地将大浮点数更改为非常小的数字

时间:2016-12-09 04:32:20

标签: python datetime numpy

我有一个日期时间times数组,我将它们附加到一个空的numpy数组,但首先我将它们转换为unix时间。转换工作正常,但是当我将它们添加到数组中时,我会得到像e-310这样的疯狂小值

#times = [Array of datetimes]
time_unix = np.empty(len(times))

for t in times:
    temp_time = time.mktime( t.timetuple() )
    np.append(time_unix, temp_time)

结果

对于日期时间:2015-08-05 00:27:00

time_unix[0]应该是什么:1438734420.0

time_unix[0]实际上是什么:6.92520780368e-310

2 个答案:

答案 0 :(得分:4)

如果要插入值,则不应使用np.append。您所看到的是np.empty - 单元格(可能是任何内容)的结果。

将您的循环更改为:

for idx, t in enumerate(times):
    ...
    time_unix[idx] = temp_time

答案 1 :(得分:2)

对于数组的迭代定义,从列表开始,并向其追加值。将数组放在最后。 np.append始终给初学者带来问题,应该被禁止。

In [393]: times =[]
In [394]: for i in range(3):
     ...:     times.append('2015-08-%02d 00:27:00'%(i+5))
     ...:     
In [395]: times
Out[395]: ['2015-08-05 00:27:00', '2015-08-06 00:27:00', '2015-08-07 00:27:00']
In [396]: dates = np.array(times, np.datetime64)
In [397]: dates
Out[397]: array(['2015-08-05T00:27:00', '2015-08-06T00:27:00', '2015-08-07T00:27:00'], dtype='datetime64[s]')

了解np.datetime64的用法。它使数据的数组操作更容易。