将数据附加到bcolz表中的性能

时间:2015-10-21 08:56:25

标签: python macos numpy python-3.5 bcolz

我刚开始使用bcolz软件包并在ctables上运行tutorial。使用fromiter函数创建表,即:

N = 100*1000
ct = bcolz.fromiter(((i,i*i) for i in range(N)), dtype="i4,f8", count=N, rootdir='mydir', mode="w")

速度快,在我的电脑上耗时约30ms(带SSD存储的2.7GHz Core i7),但是第二个例子:

with bcolz.zeros(0, dtype="i4,f8", rootdir='mydir', mode="w") as ct:
     for i in range(N):
        ct.append((i, i**2))

很慢(45秒)。我可以通过不写入磁盘来接近fromiter时间(即删除rootdir='mydir', mode="w",但它仍然大约2秒)。

这个例子使用了很多非常小的附加内容,我想知道这是否是一个拥有大量数据的推荐用例。关于这些操作应该花多长时间没有任何难以理解的数字,只有很多关于库快速的建议。

我尝试修改代码以块的形式写入数据:

with bcolz.zeros(0, dtype="i4,f8", rootdir="mydir", mode='w') as ct:
    for i in range(10):
        ii = np.arange(10000) + 10000*i
        ct.append((ii,ii**2))

如果我不写入磁盘,现在需要45ms-down到6ms。这似乎与我见过的bcolz案例的建议用法更加兼容。

我在写作时找不到关于需要阻止的文档,所以我认为这可能是由于我的系统?

1 个答案:

答案 0 :(得分:-1)

%timeit with bcolz.zeros(0, dtype="i4,f8", rootdir="mydir", mode='w') as ct: ct.append([np.arange(10000)+10000*i for i in range(10)])

100个循环,最佳3:3.82 ms每个循环