How to create a specific matrix from a regular matrix
Afficher commentaires plus anciens
I wanna create a specific matrix B from a regular matrix A as following in Matlab. Is there anyone who can help me to use a better method to generate it, not for loop? The matrix size could be various. In example, it's 3 by 3 matrix. It could be 3 by n matrix. Thanks
A=[ a b c;
d e f;
g h i]
B=[a 0 0;
d b 0;
g e c;
0 h f;
0 0 i]
3 commentaires
Azzi Abdelmalek
le 29 Août 2013
What is the relation between A and B?
Image Analyst
le 29 Août 2013
B is like A that is rotated 45 degrees down.
Pierre
le 29 Août 2013
Réponse acceptée
Plus de réponses (4)
Here is a one-liner. Assume
>> A = randi(20, 3, 4) % Example.
A =
19 16 2 16
6 8 2 19
16 12 11 3
then
>> B = full(spdiags(A.', 1-(1:size(A,1)), sum(size(A))-1, size(A,2)))
B =
19 0 0 0
6 16 0 0
16 8 2 0
0 12 2 16
0 0 11 19
0 0 0 3
is what you are looking for. Note that it is not the fastest solution, but it is appropriate for A matrices with nCols >> nRows. In such case, remove the call to FULL and keep the solution sparse.
Image Analyst
le 29 Août 2013
Very simple:
B = [A(1,1), 0, 0;
A(2,1), A(1,2), 0;
A(3,1), A(2,2), A(1,3);
0, A(3,2), A(2,3);
0, 0, A(3,3)];
3 commentaires
Image Analyst
le 29 Août 2013
For the 3 row by n column case, maybe something with kron, hankel, or toeplitz but I'll leave it to someone smarter than me to figure that out.
Pierre
le 29 Août 2013
Image Analyst
le 29 Août 2013
What would you expect this to give as a result:
A=[ 1 2 3 4 5 6;
7 8 9 10 11 12;
13 14 15 16 17 18]
Jos (10584)
le 29 Août 2013
Just for fun and to show the power of logical indexing:
A = reshape(1:12,3,[]).' % input
[m,n] = size(A) ;
tmp = cumsum(cumsum(eye(n+m-1,n)))
B = double(tmp & (tmp < m+1))
B(logical(B)) = A
Andrei Bobrov
le 29 Août 2013
Modifié(e) : Andrei Bobrov
le 29 Août 2013
[m,n] = size(A);
B = ones(m+n-1,n);
p = tril(B) & rot90( tril(B),2);
B = B - 1;
B(p) = A;
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!