# change Index of non-zero values in 3D array

1 view (last 30 days)
lucksBi on 11 Mar 2017
Commented: lucksBi on 12 Mar 2017
HI.. I have a 3D array like this:
val(:,:,1) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 22 0 0 1
0 0 0 0 0
33 0 -1 0 0
0 0 0 -1 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
The problem is that i want all values to be in same row. e.g. in val(:,:,1) it should be 33,22,-1,-1,1 in 6th row of matrix. Is there any way to do this? I am new to matlab so sorry if my question sounds awkward.

the cyclist on 11 Mar 2017
Edited: the cyclist on 11 Mar 2017
Here is one way.
val(:,:,1) = [
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 22 0 0 1
0 0 0 0 0
33 0 -1 0 0
0 0 0 -1 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0];
val(:,:,2) = [
0 0 0 0 0
14 0 0 0 0
0 0 4 0 0
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 16 0 0 0
0 0 0 2 0
0 0 0 0 0];
newval = zeros(size(val));
newval(6,:,:) = reshape(val(val~=0),size(val(1,:,:)));
I made up some 3D data based on your first "slice". Then, I create a newval matrix that is the same size (but all zeros), and fill in the 6th row with the non-zero values from val.
lucksBi on 12 Mar 2017
Thanks alot