2013-09-09 3 views
3

я должен выполнить эту операцию:Сохранение разреженной матрицы в блоках в Matlab?

N = A'*P*A 

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

Матрица N слишком велика для хранения в полном объеме (из памяти при попытке выделить). Итак, я хочу хранить редкими способами. В то время как разреженная команда генерирует только значения в строке, формате столбца, может ли она применяться для хранения полосатых матриц с столбцом строки в качестве индекса блока?

Я пробовал spalloc, заданный в this вопрос, но он не помог сохранить строку и индекс блока. Спасибо.

enter image description here Изображение для формирования A P A»

Проблема заключается в блоках. Блоки сами по себе скудны. Таким образом, можно создавать блоки как разреженные матрицы при сохранении. Итак, если в блоке есть строка = 1 и col = 1, то это можно сделать?

N(row,col) = sparse(A'*P*A) 
+0

Не могли бы вы предоставить примерный код, который создает похожие A и P интереса? – Steve

+0

@Steve Я поделился изображением для A и P, чтобы показать структуру. – shunyo

+0

В чем проблема? Если вы знаете координаты внутри блока, размер всех блоков и блокирует его; то вы уже все знаете. –

ответ

1

Там могут быть некоторые дополнительные уловки, чтобы играть, но первое, что нужно попробовать, чтобы убедиться, что полная матричная N никогда не создается в памяти. Непосредственной проблемой является то, что если вы вызываете sparse(A'*P*A), тогда вы будете несколько A'*P, затем (A'*P) * A, и только тогда вы сделаете его разреженным и вытащите нули. Прямо перед тем, как сделать его разреженным, все нерезкое матричное представление N находится в памяти. Для того, чтобы заставить MATLAB быть умнее, выполните следующие действия:

SA = sparse(A); 
N = SA'*sparse(P)*SA; 
whos N 

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

+0

Это замечательно. Благодарю. – shunyo

Смежные вопросы