我刚刚开始使用bcolz包,并在ctables上运行教程。使用fromiter函数创建表,即:
N = 100*1000
ct = bcolz.fromiter(((i,i*i) for i in range(N)), dtype="i4,f8", count=N, rootdir='mydir', mode="w")速度很快,在我的计算机上占用了大约30 is (2.7GHz带有SSD存储的核心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))如果我不写磁盘的话,这需要45毫秒-下降到6毫秒。这似乎更符合我所见过的bcolz案例的建议用法。
在编写时,我找不到很多关于需要阻塞的文档,所以我认为这可能是由于我的系统?
发布于 2016-06-23 16:17:43
%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毫秒
https://stackoverflow.com/questions/33254966
复制相似问题