Pytables очень медленно читает CArray

Я создал фрагментированный массив:

import tables
FILTERS = tables.Filters(complib='lzo', complevel=1)
h5file = tables.openFile('file.h5', mode='w', filters=FILTERS)
x = h5file.createCArray(h5file.root,'chunk_array',tables.Float64Atom(),
                        shape=(256, 256, 256, 6, 6),
                        chunkshape = (256, 256, 256, 1, 1))

fill x by some value

h5file.close()

Но когда я читаю этот файл, pytables занимает огромное время:

FILTERS = tables.Filters(complib='lzo', complevel=1)
E5F = tables.open_file('file.h5', mode='r', filters=FILTERS)
carray = E5F.root.chunk_array[0, 0, 0]

Это займет... 22 секунды!

Я сделал что-то неправильно? Как ускорить скорость чтения в этом случае?


person user2863620    schedule 16.04.2014    source источник
comment
Я выбираю chunkshape = (256, 256, 256, 1, 1) из-за способа заполнения x. Что-то вроде этого: x[:, :, :, 0, 0] = пустой массив... и это быстрее, чем None в сто раз.   -  person user2863620    schedule 17.04.2014


Ответы (1)


Попробуйте изменить форму фрагмента, чтобы сначала разбить на фрагменты самые внешние оси, а не самые внутренние. Например, chunkshape=(1, 256, 256, 6, 6). При этом ваш второй скрипт выполняется за 0,474 секунды на моей машине.

person Anthony Scopatz    schedule 16.04.2014
comment
Я выбираю chunkshape = (256, 256, 256, 1, 1) из-за способа заполнения x. Что-то вроде этого: x[:, :, :, 0, 0] = numpy array... Теперь файл уже записан, можно ли изменить chunkshape этого файла при чтении? Я не вижу никаких аргументов * относительно chunkshape в методе чтения. - person user2863620; 17.04.2014