# create a array base on specific condition ?

7 views (last 30 days)
MUKESH KUMAR on 30 Aug 2018
Commented: MUKESH KUMAR on 31 Aug 2018
I had a array like this
A=[0 0 0 10 0 0 0 0 8 0 0 5 0 0 0 3 0 2 0 0 0 1 0 0 0];
and now I want to create a array B like this in which
B(4)=10-8=2;
[B(4)=A(4)-next upcoming non zero value ],
B(9)=8-5=3;[B(9)=A(9)-next non zero value]
and similarly for
B(12)=5-3=2;
B(16)=3-2=1;
B(18)=2-1=1;
B(22)=1;
and rest of the B values are zero. thanks
##### 2 CommentsShowHide 1 older comment
MUKESH KUMAR on 30 Aug 2018
In the B matrix, I just want to put the difference of number at that position to the next non zero number.

Stephen Cobeldick on 30 Aug 2018
Edited: Stephen Cobeldick on 30 Aug 2018
>> idx = A~=0;
>> A(idx) = [-diff(A(idx)),1]
A =
0 0 0 2 0 0 0 0 3 0 0 2 0 0 0 1 0 1 0 0 0 1 0 0 0
MUKESH KUMAR on 31 Aug 2018
sorry for that I found correction needed from my side, thanks alot.

jonas on 30 Aug 2018
v=A(find(A~=0));
vid=find(A~=0);
B=A
B(vid)=B(vid)-[v(2:end) 0]
not the most elegant solution