how to create a 3D diagonal matrix from a 2D matrix ?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hi, I have a 2D matrix A=rand(3,5) and i want to create a 3D matrix B, where
B(1,:,:) = diag(A(1,:)) ; B(2,:,:) = diag(A(2,:)) ; B(3,:,:) = diag(A(3,:))
so the final size of B is expected to be 3x5x5
I am looking for a command to calculate B without passing through loops or for .
thanks
4 comentarios
Matt Fig
el 23 de Ag. de 2012
But that is not what you wrote above! You clearly have B and C as 3D and the equation you show produces an error. So which is it? 3D or 2D? How are we to help if you say 3D one time and 2D the next??
Respuesta aceptada
the cyclist
el 23 de Ag. de 2012
This is a little kludgy, but it works. I deliberately did not simplify some of the operations, to keep it clearer where the 5's and 3's come in.
A = rand(3,5);
linearIndex = logical([ones(3*1,1); repmat([zeros(3*5,1); ones(3*1,1)],[5-1 1])]);
B = zeros(3,5,5);
B(linearIndex) = A(:);
Más respuestas (1)
Sean de Wolski
el 23 de Ag. de 2012
Editada: Sean de Wolski
el 23 de Ag. de 2012
So each slice of B should contain a column vector (like you have above)? Why not just use a FOR-loop? or bsxfun? For example:
x = bsxfun(@minus,C,A).\D
Actually, bsxfun won't fill in zeros here so a for-loop is your best bet.
2 comentarios
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!