## How to extract first non-zero element in each column and put into a new array

### Kyle Vanlerberghe (view profile)

on 16 Sep 2019
Latest activity Answered by Andrei Bobrov

### Andrei Bobrov (view profile)

on 16 Sep 2019
I have an array which represents a 2-D vertical slice of a cloud. I want to get cloud-top properties for the cloud so I want to just plot a line graph of the top layer. But the row corresponding to the first non-zero number changes with each column. Does anyone know how I can extract the first non-zero element in each column and put that into a new array? For example:
in=[0 0 6 0 0 5;
1 3 5 1 0 4;
4 4 5 3 4 5]
out=[1 3 6 1 4 5]

### Andrei Bobrov (view profile)

on 16 Sep 2019

out = in(cumsum(cumsum(in~=0)) == 1)'

### the cyclist (view profile)

on 16 Sep 2019
Edited by the cyclist

### the cyclist (view profile)

on 16 Sep 2019

Here is a one way:
in=[0 0 6 0 0 5;
1 3 5 1 0 4;
4 4 5 3 4 5];
[m,n] = size(in);
[i,j] = find(in);
[~,jj] = unique(j);
out = in(i(jj)+(0:m:(m*(n-1)))')'

### the cyclist (view profile)

on 16 Sep 2019
Edited by the cyclist

### the cyclist (view profile)

on 16 Sep 2019

Here is one way:
in=[0 0 6 0 0 5;
1 3 5 1 0 4;
4 4 5 3 4 5];
mid = in;
for nr = size(in,1)-1:-1:1
mid(nr,mid(nr,:)==0) = mid(nr+1,mid(nr,:)==0);
end
out = mid(1,:);

### the cyclist (view profile)

on 16 Sep 2019

Here is one way:
in=[0 0 6 0 0 5;
1 3 5 1 0 4;
4 4 5 3 4 5];
[m,n] = size(in);
out = nan(1,n);
for nc = 1:n
[~,~,out(nc)] = find(in(:,nc),1);
end