Как эргономично выполнить умножение матриц внутри потокового движка Polars? ⇐ Python

Программы на Python
Anonymous
Как эргономично выполнить умножение матриц внутри потокового движка Polars?

Сообщение Anonymous »

У меня есть большая таблица данных, содержащая сотни миллионов строк/событий, каждая из которых имеет около 50 числовых столбцов, назовите их от c1 до c50. Допустим, для каждого события я хочу выполнить умножение матрицы на вектор, где я определяю матрицу через, например
M = ( (c1, c2, c3), (c4, c5, c6), (c7, c8, c9) )
и вектор через, например
v = (c48, c49, c50)
Я мог бы сделать это с помощью numpy, но из-за размера моего набора данных одна операция превышает объем оперативной памяти, что в наши дни становится все более важным фактором. Очевидным решением является разделение задания на пакеты и вручную корректировка размера каждого из них. Однако это непростая задача, и я обнаружил, что библиотека Polars может выполнить эту работу, используя механизм потоковой передачи и сохраняя следующие выходные данные:
v1 = c1 * c48 + c2 * c49 + c3 * c50
и аналогично для двух других выходных векторных компонентов. Примечательно, что использование механизма потоковой передачи означает, что мне не нужно думать о разделении набора данных на пакеты. К счастью, все эти операции выполняются только над строками, что означает, что все умножения и сложения доступны в потоковом движке. Однако, если мне придется объединить умножения матриц вместе или матрицы станут больше, вы можете себе представить, насколько громоздким это станет.
Таким образом, я пытаюсь продумать систему или оболочку для автоматизации расширения всех операций линейной алгебры на умножение и сложение, но мне не очень повезло, хотя, вероятно, это не должно быть очень сложной проблемой. Я знаю, что Polars, возможно, не были разработаны специально для этого, но его потоковый движок делает это направление очень привлекательным по сравнению с numpy.
Спасибо за помощь.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ming-engin

Вернуться в «Python»