How to create a specific matrix from a regular matrix
3 vues (au cours des 30 derniers jours)
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
Réponse acceptée
Azzi Abdelmalek
le 29 Août 2013
A=[ 1 2 3;4 5 6;7 8 9]
[n,m]=size(A)
B=[A;zeros(n-1,m)]
out=cell2mat(arrayfun(@(x) circshift(B(:,x),[x-1 0]),1:m,'un',0))
6 commentaires
Cedric
le 29 Août 2013
You wrote 3x1000 actually, which should produce a significantly sparse 1002x1000 output, whereas the 1000x3 should produce a significantly dense 1002x3 output.
Plus de réponses (4)
Cedric
le 29 Août 2013
Modifié(e) : Cedric
le 29 Août 2013
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.
0 commentaires
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
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
0 commentaires
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;
0 commentaires
Voir également
Catégories
En savoir plus sur Sparse Matrices 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!