Обновлено 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 раз быстрее, чем доступ к маскам. Это объясняет разницу между секундами и минутами, которую я вижу в своем полном примере. Надеемся, что эти данные полезны для других, кто сталкивается с этой проблемой.