ndarray быстрее, чем recarray access? - PullRequest
0 голосов
/ 03 ноября 2018

Мне удалось скопировать данные повторного массива в ndarray, выполнить некоторые вычисления и вернуть ndarray с обновленными значениями.

Затем я обнаружил возможность append_fields() в numpy.lib.recfunctions и подумал, что было бы намного разумнее просто добавить 2 поля в мой исходный массив для хранения моих вычисленных значений.

Когда я сделал это, я обнаружил, что операция была намного, намного медленнее. Мне не нужно было рассчитывать время, процесс на основе ndarray занимает несколько секунд по сравнению с минутой + с повторным массивом, и мои тестовые массивы маленькие, <10000 строк. </p>

Это типично? ndarray доступ намного быстрее, чем recarray? Я ожидал некоторого снижения производительности из-за доступа по имени поля, но не так сильно.

1 Ответ

0 голосов
/ 05 ноября 2018

Обновлено 15 ноября 2018 года
Я расширил свои временные тесты, чтобы прояснить различия в производительности для ndarray, структурированного массива, повторного массива и замаскированного массива (тип массива записей?). В каждом есть тонкие различия. Смотрите обсуждение здесь:
NumPy-обсуждение: структурированные-массивы-recarrays-и-запись-массивов

Вот результат моих тестов производительности. Я построил очень простой пример (используя 1 из моих наборов данных HDF5), чтобы сравнить производительность с теми же данными, которые хранятся в 4 типах массивов: ndarray, структурированный массив, recarray и mask mask. После создания массивов они передаются в функцию, которая просто проходит по каждой строке и извлекает 12 значений из каждой строки. Функции вызываются из функции timeit за один проход (число = 1). Этот тест измеряет только функцию чтения массива и избегает всех других вычислений.
Результаты приведены ниже для 9 000 строк:

for ndarray: 0.034137165047070615
for structured array: 0.1306827116913577
for recarray: 0.446010040784266
for masked array: 31.33269560998199

На основании этого теста производительность доступа уменьшается с каждым типом. Время доступа для структурированного массива и повторного массива в 4–13 раз медленнее, чем для доступа к ndarray (но все это только доли секунды). Тем не менее, ndarray доступ в 1000 раз быстрее, чем доступ к маскам. Это объясняет разницу между секундами и минутами, которую я вижу в своем полном примере. Надеемся, что эти данные полезны для других, кто сталкивается с этой проблемой.

...