Python Numpy: структурированные массивы и стоимость операций с одним и тем же типом данных - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу создать массив массивов структуры:

[line_number,count,temperature,humidity,sensor1_on,sensor2_on]

Где первые два должны быть uint32, тогда как температура и влажность могут быть uint8, а sensor_ons может иметь тип bool.

. Позже мне нужно отсортировать 2d массив на основе комбинации line_number и затем считать.Мне также нужно выполнить средние и другие статистические вычисления для списков всех данных о температуре и влажности (отдельно).

Я нашел структурированные массивы, которые удобны для хранения и поиска данных:

np_data=np.zeros([num_lines],
                          dtype='uint32,'#Line No
                                'uint32,'# Count
                                'uint8,' #TEMP
                                'uint8,' #HUMID
                                'bool,' #S1 On
                                'bool'#S2 On
                          )

для этого против

np_data=np.zeros([num_lines,5],dtype='uint32') 
# I would pack my bools into the last uint32 and then unpack later 
# but it seems like a waste of space

Потеряю ли я что-нибудь (вычислительную мощность, векторизованную обработку, скорость сортировки и т. д.), создавая структурированный массив по сравнению с массивом с одинаковыми типами данных?Есть ли другое решение, которое можно порекомендовать?

1 Ответ

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

Я провел тестирование производительности нескольких типов массивов.Результаты моего теста доступны в качестве ответа в этой теме:
ndarray быстрее, чем повторный доступ?
(Не обращайте внимания на отрицательный ответ на мой вопрос. Видимо, кому-то не понравилось, как я его задал.)

Короткая версия: извлечение данных из масочного массива было намного медленнее, чем та же операция на ndarray.Время доступа для структурированного массива и повторного массива было медленнее, чем для ndarray, но все это были доли секунды.Очевидно, что при использовании замаскированных массивов возникают накладные расходы (возможно, аналогично массиву записей?).Здесь есть хорошее обсуждение различий между типами массивов:
numpy-обсуждение: структурированные массивы-записи-массивы-записи-записи

Существуют и другие ограничения.Например, многие (большинство / все) из матриц и математических операций ограничиваются ndarrays (требуется один и тот же тип данных).Я не думаю, что они применимы к вашему случаю, так как вы используете структурированный массив как таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...