排序/ lexsort / bincount /等。对于不适合内存的数组

时间:2015-11-22 00:15:44

标签: python numpy bigdata

我试图扩大一个用numpy编写的库,以便它可以处理不适合内存的数组(~10个100亿个元素的数组)

hdf5(h5py)是一个临时解决方案,但我在很大程度上依赖于排序和索引(b = a [a> 5]),这些都在h5py中不可用并且很难写。

是否有可以提供这些工具的库?

具体来说,我需要基本的数学,排序,lexsort,argsort,bincount,np.diff和索引(boolean和索引数组)。

1 个答案:

答案 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()