2012-05-15 2 views
2

У меня есть большой массив (1000x500000x6), который хранится в файле pyTables. Я делаю некоторые расчеты на нем, которые довольно оптимизированы с точки зрения скорости, но самое время занимает нарезка массива.Ускорение среза большого массива numpy

В начале сценария, мне нужно, чтобы получить подмножество строк: reduced_data = данные [row_indices,:,:], а затем, для этого восстановленного набора данных, мне нужно, чтобы получить доступ к:

  • колонны по одному: reduced_data [:, clm_indice ,:]
  • подмножество столбцов: reduced_data [:, clm_indices ,:]

Получение этих массивов принимает навсегда. Есть ли способ ускорить это? например, хранение данных по-разному?

+1

Я думаю, вы должны попытаться получить их по строкам, так как это (я считаю) способ, которым они упорядочены в файле. Это может иметь большое значение в такой большой таблице. – Lior

+0

Являются ли данные PyTables хранимыми в таблице или массиве? – dtlussier

+0

@ dtlussier данные хранятся в сжатом карере. –

ответ

1

Вы можете попробовать выбирая chunkshape вашего массива мудро, см: http://pytables.github.com/usersguide/libref.html#tables.File.createCArray управления Этот вариант, в каком порядке данные физически хранятся в файле, так что может помочь ускорить доступ.

С некоторой удачей, для вашего шаблона доступа к данным, что-то вроде chunkshape=(1000, 1, 6) может работать.

+0

Я еще не тестировал это, но я отмечаю его как лучший ответ, поскольку он указал мне на интересный вариант, который я не видел сам. Благодаря ! –

Смежные вопросы