How to fill a 3D array with values calculated in a loop?

3 views (last 30 days)
I want to fill a 3D array with values calculated in a loop. Each iteration of the loop generates a single new value which I want to put in an array, so that I end up with a 2D array of all the new values that correspond to their parent value in the old matrix.
D = rand(3,3,4);
d = rand(2,4);
for i=1:3;
for j=1:3;
E = [D(i,j,1);D(i,j,2);D(i,j,3);D(i,j,4)];
F = d*E;
How do I print each iteration of 'F' into a new array? F is a 2x1 matrix, so I'd like to have one 3x3 array with the F(1,1) values and a second 3x3 array with the F(2,1) values. I'd like to have the arrays separate, I know I can always concatenate them if I need all the data in one place.
I'm also open to suggestions if you think I've gone about this poorly. Thanks in advance.

Accepted Answer

Cedric Wannaz
Cedric Wannaz on 23 Oct 2017
Edited: Cedric Wannaz on 23 Oct 2017
This would be one way to do it if you have MATLAB R2016b or newer:
A = sum( D .* permute( d(1,:), [1, 3, 2] ), 3 ) ; % First array.
B = sum( D .* permute( d(2,:), [1, 3, 2] ), 3 ) ; % Second array.
  1 Comment
Cedric Wannaz
Cedric Wannaz on 30 Oct 2017
If this is working for you, please [Accept] the answer. If not, I am happy to discuss what is not working.

Sign in to comment.

More Answers (0)


Community Treasure Hunt

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

Start Hunting!