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?

 채택된 답변

the cyclist
the cyclist 2023년 8월 5일

0 개 추천

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)
ans = 1
% Length in 31st dimension
size(M,31)
ans = 1
Regarding how that ends up being (365x721x1440), you'll need to provide more detail.

댓글 수: 4

Let me try again.
A=rand(365,721,1440);
B=[1:365]'
I want to divide A by B along the first dimension (365). My thought was that I'll need to reshape B then divide the two. Does that sound right?
You mean
A=rand(365,721,1440);
B=[1:365]';
for i = 1:365
A(i,:,:) = A(i,:,:)/B(i);
end
A
?
DGM
DGM 2023년 8월 6일
편집: DGM 2023년 8월 6일
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
A = 4×1
1 2 3 4
B = 2*ones(4,4,2) % a 3D array with the same page height
B =
B(:,:,1) = 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 B(:,:,2) = 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
% you could expand A to have the same size as B
% A = repmat(A,[1 4 2]);
% but it's not necessary
A./B
ans =
ans(:,:,1) = 0.5000 0.5000 0.5000 0.5000 1.0000 1.0000 1.0000 1.0000 1.5000 1.5000 1.5000 1.5000 2.0000 2.0000 2.0000 2.0000 ans(:,:,2) = 0.5000 0.5000 0.5000 0.5000 1.0000 1.0000 1.0000 1.0000 1.5000 1.5000 1.5000 1.5000 2.0000 2.0000 2.0000 2.0000
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.
John Cruce
John Cruce 2023년 8월 6일
You're excatly right. I was definitely overcomplicating it.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

릴리스

R2023a

질문:

2023년 8월 5일

댓글:

2023년 8월 6일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by