how to create a 3D diagonal matrix from a 2D matrix ?

7 vues (au cours des 30 derniers jours)
yasser
yasser le 23 Août 2012
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 commentaires
Matt Fig
Matt Fig le 23 Août 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??
yasser
yasser le 23 Août 2012
your comment is correct, but that's another issue to solve. I will open another thread to explain in details my problem.

Connectez-vous pour commenter.

Réponse acceptée

the cyclist
the cyclist le 23 Août 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(:);
  1 commentaire
yasser
yasser le 23 Août 2012
This command is working perfectly. However is it time-cost efficient for a global optimization tool where the dimensions of B are 100x380x380. It looks a bit costly ?

Connectez-vous pour commenter.

Plus de réponses (1)

Sean de Wolski
Sean de Wolski le 23 Août 2012
Modifié(e) : Sean de Wolski le 23 Août 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 commentaires
yasser
yasser le 23 Août 2012
loop for wont help much, because i have simplified my problem to a 3x5x5, my real problem is much bigger 100x380x380.
Sean de Wolski
Sean de Wolski le 23 Août 2012
And how is a for-loop not perfectly applicable to that?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating and Concatenating 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