Плюсы и минусы использования разреженных матриц в python / R?

#python #r #sparse-matrix

#python #r #sparse-matrix

Вопрос:

Я работаю с большими разреженными матрицами (матрицами элементов документа, сгенерированными из текста) в python. Для их обработки требуется довольно много времени и памяти, и я полагаю, что разреженные матрицы могли бы предложить некоторые улучшения. Но я обеспокоен тем, что использование библиотеки разреженных матриц затруднит подключение к другим модулям python (и R, через rpy2).

Могут ли люди, которые уже пересекли этот мост, дать какой-нибудь совет? Каковы плюсы и минусы использования разреженных матриц в python / R с точки зрения производительности, масштабируемости и совместимости?

Ответ №1:

Использование разреженных матриц в Python само по себе может быть не очень хорошей идеей. Вы проверяли разреженные матрицы в numpy / scipy?

Numpy приносит огромное преимущество использования в основном C-кода для повышения производительности в Python.

Исходя из моего ограниченного опыта обработки текста в R, производительность делает его практически непригодным для чего-либо, кроме исследовательского анализа данных.

В любом случае, вам не следует использовать ванильные списки для разреженных матриц, это (по понятным причинам) займет некоторое время, чтобы разобраться с ними.

Комментарии:

1. Я видел эту документацию, но мне трудно разобраться в последствиях. Совместимы ли другие библиотеки с классом sparse matrix? Какого увеличения скорости / памяти я могу ожидать?

Ответ №2:

Существует несколько способов представления разреженных матриц (в документации к пакету R SparseM сообщается о 20 различных способах хранения разреженных матричных данных), поэтому о полной совместимости со всеми решениями, вероятно, не может быть и речи. Числовые параметры также предполагают, что наилучшего решения во всех ситуациях не существует.

Выберите либо разреженные матрицы numpy, либо R’s SparseM (через rpy2) в зависимости от того, где находятся ваши процедуры обработки больших чисел для этих матриц (numpy или R).