我想在磁盘阵列上存储由 zarr 支持的 1TB 随机数据。目前,我正在做类似以下的事情:
import numpy as np
import zarr
from numcodecs import Blosc
compressor = Blosc(cname='lz4', clevel=5, shuffle=Blosc.BITSHUFFLE)
store = zarr.DirectoryStore('TB1.zarr')
root = zarr.group(store)
TB1 = root.zeros('data',
shape=(1_000_000, 1_000_000),
chunks=(20_000, 5_000),
compressor=compressor,
dtype='|i2')
for i in range(1_000_000):
TB1[i, :1_000_000] = np.random.randint(0, 3, size=1_000_000, dtype='|i2')
这需要一些时间——我知道如果我不总是生成1_000_000
随机数而是重用数组,那么事情可能会得到改善,但我现在想要更多的随机性。有没有更好的方法来构建这个随机数据集?
更新 1
使用更大的 numpy 块可以加快速度:
for i in range(0, 1_000_000, 100_000):
TB1[i:i+100_000, :1_000_000] = np.random.randint(0, 3, size=(100_000, 1_000_000), dtype='|i2')