Матрица разреженного вращения Python SciPy

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

Какую разреженную структуру данных лучше всего использовать для матриц вращения в Python?


person danielvdende    schedule 07.03.2015    source источник


Ответы (1)


Если у вас уже есть матрица вращения в виде плотного массива, вы можете просто сделать

m = csr_matrix(dense_rot_matrix)

Следует использовать один из двух типов csr_matrix или csc_matrix.

Лучшим вариантом было бы заполнить уже разреженную матрицу, что может быть легко выполнено с использованием типа coo_matrix, который имеет эффективные методы для преобразования в csr_matrix или csc_matrix. Я использовал Cython для создания разреженных матриц таким способом очень эффективно.

person Saullo G. P. Castro    schedule 07.03.2015
comment
Спасибо! :) Еще один вопрос; если я использую csr_matrix или csc_matrix, как мне умножить их на вектор (это просто обычный массив)? Насколько я понимаю, это нельзя сделать немедленно, верно? РЕДАКТИРОВАТЬ: неважно, ошибка в моем коде, моя ошибка. Спасибо еще раз! - person danielvdende; 07.03.2015
comment
@danielvdende правильно, вы можете просто умножить на m*a_ndarray_object или используя m.dot(a_ndarray_object) - person Saullo G. P. Castro; 07.03.2015