0

我刚刚开始使用该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 毫秒(带有 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))

现在这需要 45 毫秒——如果我不写入磁盘,则减少到 6 毫秒。这似乎更符合bcolz我所见过的案例的建议用途。

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

4

1 回答 1

-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 毫秒

于 2016-06-23T16:17:43.103 回答