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

4 vues (au cours des 30 derniers jours)
%%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))
  1 commentaire
Stephen23
Stephen23 le 16 Nov 2017
What is the expected output? Can you please provide a specific example with input and output arrays.

Connectez-vous pour commenter.

Réponse acceptée

KL
KL le 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

Plus de réponses (1)

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

Catégories

En savoir plus sur Operating on Diagonal Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by