У меня есть исходная и целевая матрица, которую я создаю матрицей смежности, используя разреженную функцию.Adjacency uint8 редкие собственные значения
W = sparse(w1(:,1),w1(:,2),1,n,n);
my n приблизительно равен 540 000 (это подмножество данных, которые у меня есть). Создание самой матрицы довольно легко вычислительно. Однако мне нужно получить собственные значения указанной матрицы. Точнее
rho = max(abs(eigs(W)));
Эта одна строка кода берет навсегда. Немного поучав в этом, мне показалось, что получение собственных значений разреженной матрицы является дорогостоящим вычислительным. Я не могу использовать полную команду, например, uint8 (full (W)), так как в итоге я превысил максимальный размер матрицы/емкость (130 ГБ памяти). Однако, похоже, что если формат был uint8, я мог бы создать указанную полную матрицу смежности.
Любая помощь приветствуется. Мне кажется, что мне нужно одно из следующего:
- Альтернативный способ построения матрицы смежности непосредственно в виде полного uint8;
- Способ преобразования матрицы смежности, которую я создал для полного uint8; или
- Альтернативный способ расчета этих собственных
При написании ответа я предположил, что w1 будет несортированным и крупным, чтобы сортироваться быстро. Если это неверно, возможно создание столбца матрицы по столбцу, для которого требуется меньше памяти, чем ответ, который я написал. – Daniel
Матрица 'uint8' размера n * n не подходит для вашей памяти. Он требует памяти '540000.^2/1024^3' ГБ, что составляет 271 ГБ. С такими большими матрицами использование «разреженного», вероятно, лучший выбор. – Daniel
Пожалуйста, исправьте меня, если я ошибаюсь, но я просто понял, что функции 'eig' и' eigs' работают только в матрицах двойного типа. Кажется, что у меня нет альтернативного способа вычисления этих собственных значений на матлабе. –