How to create a 2D diagonal matrix from a 3D matrix with a generic dimension? It could be with a loop structure.

3 views (last 30 days)
%%3D matrix k
n=3;
k=zeros(n)
for a=1:n
for b=1:n
for c=1:n
k(b,c,a)=c;
end
end
end
using blkdiag could be obtained, however for a generic number of matrices n, this doesn't work.
u=blkdiag(k(:,:,1),k(:,:,2),k(:,:,3))

Accepted Answer

KL
KL on 16 Nov 2017
Use a cell array and then something like,
c = arrayfun(@(x) k(:,:,x),1:n,'uni',0)
u = blkdiag(c{:})
u =
1 2 3 0 0 0 0 0 0
1 2 3 0 0 0 0 0 0
1 2 3 0 0 0 0 0 0
0 0 0 1 2 3 0 0 0
0 0 0 1 2 3 0 0 0
0 0 0 1 2 3 0 0 0
0 0 0 0 0 0 1 2 3
0 0 0 0 0 0 1 2 3
0 0 0 0 0 0 1 2 3

More Answers (1)

Matt J
Matt J on 16 Nov 2017
kcell=num2cell(k,[1,2]);
u=blkdiag(kcell{:});

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!