numpy Как сократить время вычислений путем преобразования 64-битных данных в 32-битные или младшие dtypes - PullRequest
0 голосов
/ 05 февраля 2019

Преобразование 64-битных данных типа int и float в 32-битные или минимально возможный тип d, который может обрабатывать все данные, улучшает вычислительную скорость?Есть ли причины , а не , чтобы сделать это?

У меня есть два кадра данных панд, каждый с ~ 5 миллионами строк и 23 столбцами, содержащими str, int, datetime, float и timedelta тип данных.Вот сокращенная примерная строка, которая включает в себя различные типы данных (см. Ниже код для воссоздания кода):

    group  job_number  submission_time      maxvmem       wait_time
0   g1     3912841     2018-09-29 16:03:49  4.040196e+09  1 days 15:49:38

Я рассматриваю сопоставление нецифровых чисел с числовыми значениями и создание массива ndarray для ускорения обработки.

Мой вопрос касается дальнейшего шага минимизации размера битов типов данных.Я спрашиваю, потому что я редко / возможно никогда не видел этот шаг в решениях, которые я читал в SO или видел в учебных пособиях.Это заставляет меня задуматься, есть ли причины , а не , чтобы сделать это и просто позволить numpy обрабатывать, какой тип dtype использовать.


MVCE

Вот моя попытка кода воссоздать пример строки выше.Кажется, работает, за исключением timedelta назначения.Когда я запускаю это, я получаю ValueError: Could not convert object to NumPy timedelta.Я бы уточнил, если кто-нибудь подскажет мне, как заставить это работать.

1 Ответ

0 голосов
/ 05 февраля 2019

Уменьшение вдвое глубины в битах с 64 до 32 уменьшит вдвое использование вашей памяти.

Самым распространенным узким местом производительности для кода с интенсивными вычислениями является пропускная способность памяти и использование кэша.

Вероятно, что ваша производительность значительно улучшится, если вы ограничены вычислениями.

Однако не выполняйте вычисления с 32 битами.Вместо этого продвиньте их до 64 в коде, который делает много математики.С 32 числами с плавающей запятой вы попадете с числовыми значениями * на 1010 * быстрее.

Я настоятельно рекомендую не использовать 16-битные числа с плавающей запятой для любых вычислений.

РЕДАКТИРОВАТЬ

В вашем примере есть переменные типы данных, такие как строки.Мой ответ становится менее актуальным, если у вас нет чисто числовых массивов.

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