PyTables 数组上的 argsort
argsort on a PyTables' array
我对 NumPy 的 argsort 有疑问。它在内存中创建一个长度为输入数组长度的 int64 数组。由于我使用的是非常大的数组,这会耗尽内存。
我用一个小的 PyTables 数组测试了 NumPy 的 argsort,它给出了正确的输出。现在,我想要的是排序算法直接使用 PyTables 的数组。有没有办法通过标准 NumPy 调用或对 NumPy 内部结构的简单破解来做到这一点?
我也对非 NumPy 替代品持开放态度 - 我只想完成工作!
由于您使用的是 Pytables,我建议您使用内置排序功能的 Table class。
%pylab
import tables
#create description of your table
class Table_Description(tables.IsDescription):
column_name = tables.Int64Col()
#create hdf5 file and table
f=tables.open_file('test.h5',mode="w")
a=f.create_table("/","my_table",description=Table_Description)
# fill table
a.append(array([randint(0,99999) for i in xrange(10000)]))
#Create a full index (on disk if you use the tmp_dir parameter
a.cols.column_name.create_index(9,kind='full',tmp_dir="/tmp/")
#write changes to disc
a.flush()
#read indices that will sort the table
ind=f.root.my_table.cols.column_name.index
ind.read_indices()
我对 NumPy 的 argsort 有疑问。它在内存中创建一个长度为输入数组长度的 int64 数组。由于我使用的是非常大的数组,这会耗尽内存。
我用一个小的 PyTables 数组测试了 NumPy 的 argsort,它给出了正确的输出。现在,我想要的是排序算法直接使用 PyTables 的数组。有没有办法通过标准 NumPy 调用或对 NumPy 内部结构的简单破解来做到这一点?
我也对非 NumPy 替代品持开放态度 - 我只想完成工作!
由于您使用的是 Pytables,我建议您使用内置排序功能的 Table class。
%pylab
import tables
#create description of your table
class Table_Description(tables.IsDescription):
column_name = tables.Int64Col()
#create hdf5 file and table
f=tables.open_file('test.h5',mode="w")
a=f.create_table("/","my_table",description=Table_Description)
# fill table
a.append(array([randint(0,99999) for i in xrange(10000)]))
#Create a full index (on disk if you use the tmp_dir parameter
a.cols.column_name.create_index(9,kind='full',tmp_dir="/tmp/")
#write changes to disc
a.flush()
#read indices that will sort the table
ind=f.root.my_table.cols.column_name.index
ind.read_indices()