我试图扩大一个用numpy编写的库,以便它可以处理不适合内存的数组(~10个100亿个元素的数组)
hdf5(h5py)是一个临时解决方案,但我在很大程度上依赖于排序和索引(b = a [a> 5]),这些都在h5py中不可用并且很难写。
是否有可以提供这些工具的库?
具体来说,我需要基本的数学,排序,lexsort,argsort,bincount,np.diff和索引(boolean和索引数组)。
答案 0 :(得分:0)
PyTables正是为此而设计的(也基于hdf5
)。首先将阵列存储到磁盘
import numpy as np
import tables as tb
# Write big numpy array to disk
rows, cols = 80000000, 2
h5file = tb.open_file('test.h5', mode='w', title="Test Array")
root = h5file.root
array_on_disk = h5file.create_carray(root,
'array_on_disk',tb.Float64Atom(),shape=(rows,cols))
# Fill part of the array
rand_array = np.random.rand(1000)
array_on_disk[10055:11055] = rand_array
array_on_disk[12020:13020] = 2.*rand_array
h5file.close()
然后直接在文件
中包含的数组(或部分数组)上执行计算h5file = tb.open_file('disk_array.h5', mode='r')
print h5file.root.array_on_disk[10050:10065,0]
# in-place sort
h5file.root.array_on_disk[100000:10000000,:].sort(axis=0)
h5file.close()