Diagonal displacement of matrix into another matrix
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Lodovico Morando
le 5 Oct 2020
Modifié(e) : Lodovico Morando
le 10 Oct 2020
Hi,
I have this matrix 2X8:
and from this I need to create 4 matrices of zeros 5X5 where I displace the 2X8 matrix thi way:
Note that I have to do this parametrically so that if for exaple I have a matrix 2X10 it needs to be dsiplaced in 5 matrices 6X6 and so on.
Any suggestions?
8 commentaires
Adam Danz
le 6 Oct 2020
Got it. Looks like Matt J and I answered at nearly the same time.
His approach puts the output matrices into a cell array. To access output matrix number n in his answer,
outputMatrices{n}
My approach stores the output matricies within a 3D array. To access output matrix number n in my answer,
A(:,:,n)
Réponse acceptée
Matt J
le 6 Oct 2020
Modifié(e) : Matt J
le 6 Oct 2020
Call your matrix A,
A=reshape(1:16,2,[]), %example input
N=size(A,2)/2;
outputMatrices=cell(1,N);
z0=num2cell(zeros(1,N));
for i=1:N
z=z0; z{i}=A(:,2*i-1:2*i);
outputMatrices{i}=blkdiag(z{:});
end
outputMatrices{:} %the resulting matrices
0 commentaires
Plus de réponses (3)
Adam Danz
le 6 Oct 2020
Modifié(e) : Adam Danz
le 6 Oct 2020
Fast & efficient vectorized method
m is the input matrix size 2xN where N is divisible by 2.
A is the output array containing the N/2 matrices along the third dimension.
% m = reshape(1:16,2,8);
m = reshape(1:20,2,10)
% determine the linear index for the first 4 values (baseIdx)
nMat = size(m,2)/2;
matSize = [nMat,nMat]+1;
baseIdx = [1 2, matSize+[1,2]];
% determine the linear index of all values of m into A (Aidx)
A = nan([matSize,nMat]);
interval = 0: prod(matSize)+matSize(1)+1 : numel(A);
Aidx = baseIdx' + interval;
% Place values of m into A
A(Aidx) = m
0 commentaires
Bruno Luong
le 6 Oct 2020
Simple loop would be the simplest for me
% Test matrix
A=randi(10,2,8)
n = size(A,2)/2
B = zeros(n+1,n+1,n);
for k=1:n
i = k+(0:1);
j = 2*k+(-1:0);
B(i,i,k) = A(:,j);
end
B
0 commentaires
Voir également
Catégories
En savoir plus sur Operating on Diagonal 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!