Недавно я работаю над векторизацией для оптимизации производительности на C++. На данный момент он использует CSV в качестве данных. Пока что построение этих табличных данных для векторизации на основе считанных данных является узким местом. При CSV-файле размером 430 МБ со спецификацией 1 050 000 x 9 время, затраченное на каждый процесс, составляет (применена оптимизация O2):
- чтение CSV с помощью RapidCSV — 3,2 секунды ( pandas.read_csv — 4,8 секунды)
- запись 3D-данных с помощью Eigen::Tensor со значениями из других столбцов, выступающих в качестве индексов — 18,4 секунды (DataFrame.pivot — 1,8 секунды) )
- Основная функция — 0,9 секунды (с pandas.DataFrame — более 1 часа)
Запись трехмерные данные» — это почти то же самое, что построить
сводную таблицу на основе данных CSV с index=datetime_column, columns=category_column,values=data_columns. Хотя моя опорная точка представляет собой простой алгоритм, считывающий уникальные значения из datetime_column и Category_column, а затем записывающий данные с индексом, найденным в datetime_column, Category_column, при циклическом цикле всех данных CSV. Я использую MSVC из VS2022 + CMake для создания программы.
- Должен ли я использовать некоторые пакеты, которые оптимизируют сводку данных с помощью специального класса табличных данных? Есть ли у кого-нибудь рекомендации из своей практики?
- Есть ли возможность оптимизации в алгоритме свода данных? Лучший контейнер поиска для поиска по индексу? Меньше промежуточного использования памяти? Или лучший алгоритм для сведения данных?
Подробнее здесь:
https://stackoverflow.com/questions/787 ... ation-in-c