我用 ndarray 存储刻度,每个刻度都有一个 utc_timestamp[str] 作为索引,刻度价格/vols 作为值。因此,我有一个包含 2 个不同 dtypes(str 和 float)的数组。这就是我将它存储为 np.recarray 的方式
data = np.recarray((100,), dtype=[('time':'U23'),('ask1':'f'),('bid1':'f')])
tick = ['2021-04-28T09:38:30.928',14.21,14.2]
# assigning this tick to the end of data, wield
%%timeit
...: data[-1] = np.rec.array(tick)
...:
1.38 ms ± 13.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
每个循环需要 1.38 毫秒!另外,我无法使用 data[-1] = tick 设置最后一行,这会引发 ValueError: setting an array element with a sequence
让我们尝试简单的 ndarray,假设我有 2 个单独的数组,一个用于 str,一个用于 float
%%timeit
...: data[:,-1]=tick[1:]
...:
15.2 µs ± 113 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
看?快了 90 倍!这是为什么?