我刚刚开始使用该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
我所见过的案例的建议用途。
我找不到太多关于写作时需要阻塞的文档,所以我认为这可能是由于我的系统造成的?