我刚开始使用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
案例的建议用法更加兼容。
我在写作时找不到关于需要阻止的文档,所以我认为这可能是由于我的系统?
答案 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每个循环