Converting a 2d array into a 3d array
15 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi,
I am having a 2d array with size mxn
I want to convert each column into a seperate 2d diagonal matrix--- a total of 'n' diagonal matrices of size mxm
Then combining all the 2d diagonal matrices as a single 3d matrix.---size mxmxn
I tried to do this with employing a for-loop but it is taking lot of time
Can this be done without using a loop and at a faster speed?
2 commentaires
Réponses (2)
Chunru
le 28 Nov 2021
"it is taking lot of time" for what size of array?
m=200; n=100;
Z_int = rand(m, n);
Z = nan(m,m,n);
tic
for i = 1 : size( Z_int , 2)
Z( : , : , i ) = diag( Z_int( :, i ) );
end
toc
0 commentaires
Turlough Hughes
le 28 Nov 2021
You could write a linear index for the diagonal elements as follows:
[m,n] = size(Z_int)
Z = zeros(m,m,n);
idx = repmat((1:m+1:m^2).',1,n) + m^2*(0:n-1);
Z(idx(:)) = Z_int(:)
This is 2-4x faster for m >= 400 on my computer (n=500), however, on the matlab servers its a slightly slower. Whether it's faster or not for you will depend on your hardware, the size of your arrays and probably the version of matlab that you're using too.
0 commentaires
Voir également
Catégories
En savoir plus sur Linear Algebra 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!