Могу ли я использовать Лапак для вычисления собственных значений и собственных векторов больших разреженных матриц? - PullRequest
11 голосов
/ 20 июля 2010

Если бы у меня была квадратная матрица 1000 на 1000, смог бы Лапак вычислить собственные векторы и собственные значения для этой матрицы? И если это может, сколько времени это займет? А как насчет матрицы 10 000 на 10 000 или даже матрицы 1 000 000 на 1 000 000?

Обратите внимание, что это будут разреженные матрицы, в основном заполненные нулями (это будут графики, представляющие социальные сети). Существуют ли в Лапаке специальные процедуры для работы с разреженными матрицами? Я вижу рекомендацию Arpack. Но позволит ли это вычислить очень большие матрицы?

Ответы [ 3 ]

9 голосов
/ 20 июля 2010

LAPACK не имеет специальной поддержки для разреженных матриц, но ARPACK делает. В зависимости от машины, на которой вы планируете запустить это, это может исключить использование LAPACK, так как вам может не хватить памяти для очень больших матриц. См. http://www.netlib.org/utk/people/JackDongarra/la-sw.html для обзора различных библиотек линейной алгебры.

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

Исходя из ваших других вопросов, я бы рекомендовал придерживаться MATLAB. Он имеет разреженную матричную поддержку и хорош для линейной алгебры в целом.

3 голосов
/ 20 июля 2010

Если ваши матрицы разрежены, вам, вероятно, лучше использовать пакет разреженной матрицы . См. Этот StackOverflow статья для получения дополнительной информации.

Используя lapack, вы можете сделать 1000 x 1000 за пару секунд (в зависимости от вашей машины). 10000 x 10000 заняло бы в 1000 раз больше времени, поскольку все алгоритмы имеют тенденцию быть O (n ^ 3).

1 голос
/ 20 июля 2010

Лапак имеет поддержку только плотных и полосчатых матриц (нет поддержки общих разреженных матриц).Поэтому, если ваша разреженная матрица не будет объединена (из вашего описания она звучит так, как будто бы это была общая разреженная матрица, обычно хранящаяся в схеме хранения сжатых строк), тогда lapack - это не то, что вы хотите использовать.

Для большихс редкими матрицами, Арпак был бы хорошим местом для начала.

...