Reshape 1D to 3D array
27 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have a 1D array (365x1) that I need to reshape into a 3D array (365x1x1) to divide into 3D array (365x721x1440). What's the most efficient means of accomplishing this task?
Réponses (1)
the cyclist
le 5 Août 2023
MATLAB arrays implicitly have length-1 dimensions after the defined dimensions. For example
% Define 365x1 array
M = rand(365,1);
% Length in 3rd dimension
size(M,3)
% Length in 31st dimension
size(M,31)
Regarding how that ends up being (365x721x1440), you'll need to provide more detail.
4 commentaires
DGM
le 6 Août 2023
Modifié(e) : DGM
le 6 Août 2023
I think we're getting confused by the suggestion of "reshaping". The way it appears to me, reshaping A is not necessary. It appears as this is simply a misunderstanding how to make array sizes compatible for arithmetic operations. Consider the example:
A = (1:4).' % a column vector
B = 2*ones(4,4,2) % a 3D array with the same page height
% you could expand A to have the same size as B
% A = repmat(A,[1 4 2]);
% but it's not necessary
A./B
So long as the arrays are compatibly-sized along their non-singleton dimensions, you should be able to perform elementwise arithmetic without explicitly expansion. If you were running a version older than R2016b, the recommended method would be to use bsxfun() instead of repmat().
Of course, I might be interpreting the question wrong.
Voir également
Catégories
En savoir plus sur Matrix Indexing 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!