How to create a specific matrix from a regular matrix
Ältere Kommentare anzeigen
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 Kommentare
Azzi Abdelmalek
am 29 Aug. 2013
What is the relation between A and B?
Image Analyst
am 29 Aug. 2013
B is like A that is rotated 45 degrees down.
Pierre
am 29 Aug. 2013
Akzeptierte Antwort
Weitere Antworten (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
am 29 Aug. 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 Kommentare
Image Analyst
am 29 Aug. 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
am 29 Aug. 2013
Image Analyst
am 29 Aug. 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)
am 29 Aug. 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
am 29 Aug. 2013
Bearbeitet: Andrei Bobrov
am 29 Aug. 2013
[m,n] = size(A);
B = ones(m+n-1,n);
p = tril(B) & rot90( tril(B),2);
B = B - 1;
B(p) = A;
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!