numpy时间序列数据 - 矢量化填充间隙和计算增量

时间:2017-05-10 14:45:31

标签: python arrays numpy tensorflow

我使用genfromtxthstack从csv中读取了一些数据,以便连接形成(5413260,)形状的数据(大约需要17分钟,大约1GB)。 npy保存文件)

数据格式为:

timedelta64 1, temp1A, temp 1B, temp1C, ...
timedelta64 2, temp2A, temp 2B, temp2C, ...


>>> data[1:3]
array([ ('2009-01-01T18:41:00', 755, 855, 755, 855, 743, 843, 743, 843, 2),
       ('2009-01-01T18:43:45', 693, 793, 693, 793, 693, 793, 693, 793, 1)],
      dtype=[('datetime', '<M8[s]'), ('sensorA', '<u4'), ('sensorB', '<u4'), ('sensorC', '<u4'), ('sensorD', '<u4'), ('sensorE', '<u4'), ('sensorF', '<u4'), ('sensorG', '<u4'), ('sensorH', '<u4'), ('signal', '<u4')])

我想对临时工做增量:

timedelta64 1, temp1A - temp1B, temp 1B - temp1C, ...

并填写:

timedelta64 2 - timedelta64 1&lt; =采样率,否则用适当的时间戳填充存根:

timedelta64 1 + shift, 0, 0, 0, CONSTANT, ...

我目前:

  1. 遍历numpy arrayA(arrayA [i],arrayA [i + 1])
  2. 计算row_i的delta,附加到numpy arrayB
  3. 计算row_i + 1和row_i
  4. 之间的时差
  5. 迭代添加到时间戳,填充零/常量,追加到numpy arrayB
  6. 这是非常低效的 - 到目前为止它花费了12个多小时,我预计它将需要大约100天才能完成。

    什么是矢量化方法?

    我认为矢量操作首先计算增量,然后我不确定如何快速批量处理并插入缺失时间戳的填充。

    此外,重塑更快 - &gt; diff - &gt;填充或重塑 - &gt;填写 - &gt;差异?

    除此之外:这是用于使用张量流进行机器学习的预处理数据,是否有比numpy更好的工具?

1 个答案:

答案 0 :(得分:0)

由于我使用genfromtxt和异类dtypes,因此矢量化操作是通过命名列完成的:to slice columns in a tuple present in a numpy array

生成一系列numpy.datetime64:How can I make a python numpy arange of datetime

在numpy中连接大型数组很慢,最好使用预先分配的数组并使用切片填充:How to add items into a numpy array

然后,如何基于匹配datetime64合并两个结构化/记录数组并屏蔽相应的字段。可在此处找到:Compare two numpy arrays by first Column and create a third numpy array by concatenating two arrays

总体加速看起来像100天以上=&gt; &lt; 5分钟(快28,800倍)。预先分配的数组也应加快csv的加载速度。