切片在PyTables

时间:2015-05-31 04:07:35

标签: performance optimization pytables

使用PyTables对在h5中保存的数组进行切片的最快方法是什么?

方案如下:

  1. 数据已保存(无需在此优化):

    filters = tables.Filters(complib='blosc', complevel=5)
    h5file = tables.open_file(hd5_filename, mode='w',
                              title='My Data',
                              filters=filters)
    group = h5file.create_group(h5file.root, 'Data', 'Data')
    
    X_atom = tables.Float32Atom(shape=[50,50,50])
    X = h5file.create_carray(group, 'X', atom=X_atom, title='XData',
                         shape=(1000,), filters=filters)
    
  2. 数据已打开:

    h5file = tables.openFile(hd5_filename, mode="r")
    node = h5file.getNode('/', data_node)
    X = getattr(node, X_str)
    
  3. 这是我需要优化的地方,我需要做很多以下类型的无法排序的数组切片,对于许多索引和不同的最小/最大位置:

    for index, min_x, min_y, min_z, max_x, max_y, max_z in my_very_long_list:    
        current_item = X[index][min_x:max_x,min_y:max_y,min_z:max_z]
        do_something(current_item)
    
  4. 问题是: 这是完成任务的最快方法吗?

0 个答案:

没有答案