Reshape 1D to 3D array
24 views (last 30 days)
Show older comments
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?
Answers (1)
the cyclist
on 5 Aug 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 Comments
DGM
on 6 Aug 2023
Edited: DGM
on 6 Aug 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.
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!