Convert layers of 3D matrix to list of cells
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I'd like to take a 3D matrix and convert it to a list (1D) of cells.
Example:
x(:, :, 1) = magic(3);
x(:, :, 2) = 2*magic(3);
I want c{1} to be x(:, :, 1)
I want c{2} to be x(:, :, 2)
My end goal is to create a block diagonal 2D matrix of the layers of x such that,
z = [x(:,:,1), 0
0, x(:,:,2)]
or for complete...
z = [8, 1, 6, 0, 0, 0;
3, 5, 7, 0, 0, 0;
4, 9, 2, 0, 0, 0;
0, 0, 0, 16, 2, 12;
0, 0, 0, 6, 10, 14;
0, 0, 0, 8, 18, 4]
I know I can do this very easily in a loop, but there has to be a better solution. I like the following solution but it assumes that every matrix along the diagonal is the same:
blk = magic(3);
Arguments = repmat( {blk}, 1, 100 );
A = blkdiag( Arguments{:} );
Thanks in advance
0 commentaires
Réponses (1)
Azzi Abdelmalek
le 14 Avr 2014
Modifié(e) : Azzi Abdelmalek
le 14 Avr 2014
Edit
x(:, :, 1) = magic(3);
x(:, :, 2) = 2*magic(3);
x(:, :, 3) = 3*magic(3);
x=arrayfun(@(ii) x(:,:,ii),1:size(x,3),'un',0)
A = blkdiag( x{:} )
3 commentaires
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!