2015-08-03 4 views
5

Предположим, что B - это массив ячеек с разреженными матрицами в Matlab, и я хочу сформировать разреженную диагональную матричную матрицу M, диагональные блоки которой являются матрицами, хранящимися в B. Что является самым простым/наиболее эффективным способ сделать это?Создание разреженной матричной диагональной матрицы в Matlab

ответ

3

Использование blkdiag на comma-separated list генерируемой из массива ячеек:

result = blkdiag(B{:}); 

Например, с

B = {sparse([1 0 0; 2 2 0; 3 3 3]), 4*speye(2)}; 

это производит

>> result 
result = 
    (1,1)  1 
    (2,1)  2 
    (3,1)  3 
    (2,2)  2 
    (3,2)  3 
    (3,3)  3 
    (4,4)  4 
    (5,5)  4 
>> full(result) 
ans = 
    1  0  0  0  0 
    2  2  0  0  0 
    3  3  3  0  0 
    0  0  0  4  0 
    0  0  0  0  4 
+0

совершенны, спасибо. – littleO