# How to make a 3D Matrix

1 view (last 30 days)
Nicholas Deosaran on 3 Sep 2020
Edited: Jon on 14 Sep 2020
How to make a 3D Matrix that contains all ones in the first layer, all twos in the second layer and all threes in the third layer?

Nicholas Deosaran on 3 Sep 2020
Yes, but is there a way to do it with the ones function or no?
Size = [5,6,3];
M = ones(Size) .* permute([1;2;3],[3,2,1]);
Nicholas Deosaran on 3 Sep 2020
Thank you!

Jon on 3 Sep 2020
Edited: Jon on 3 Sep 2020
You can also do it like this, for example for a 2 by 4 by 3
A = ones(2,4,3).*reshape(1:3,1,1,3)

Show 1 older comment
Nicholas Deosaran on 10 Sep 2020
what does the reshape(1:3,1,1,3) fucntion do?
A simple way to reach the matrix you wanted is to create a m-by-n-by-k array of ones and then multiply it by a 1-by-1-by-k array of 1 to k. The trick is to first create a 1-by-k array and then permute it to ge the so-called 1-by-1-by-k array. You can permute it in different ways, including the permute() function and reshape().
Jon on 14 Sep 2020
The reshape(1:3,1,1,3) The first argument 1:3 makes a 3 element row vector with elements [1, 2, 3]the second, third and fourth arguments specify that we want to turn this row vector into a 1 row, by 1 column, by 3 "page" array. So 1 goes in the 1,1,1 location of the first page, 2 goes into th 1,1,2 location on the second page and 3 goes into the 1,1,3 location on the third page. By shaping it this way the array dimension for the multiplication
ones(2,4,3).*reshape(1:3,1,1,3)
Also type doc reshape on the command line to get documentation on the reshape function for further details