Diagonal displacement of matrix into another matrix
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Lodovico Morando
el 5 de Oct. de 2020
Editada: Lodovico Morando
el 10 de Oct. de 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 comentarios
Adam Danz
el 6 de Oct. de 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)
Respuesta aceptada
Matt J
el 6 de Oct. de 2020
Editada: Matt J
el 6 de Oct. de 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 comentarios
Más respuestas (3)
Adam Danz
el 6 de Oct. de 2020
Editada: Adam Danz
el 6 de Oct. de 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 comentarios
Bruno Luong
el 6 de Oct. de 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 comentarios
Ver también
Categorías
Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!