create a array base on specific condition ?

17 visualizzazioni (ultimi 30 giorni)
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 Commenti
MUKESH KUMAR
MUKESH KUMAR il 30 Ago 2018
In the B matrix, I just want to put the difference of number at that position to the next non zero number.

Accedi per commentare.

Risposta accettata

Stephen23
Stephen23 il 30 Ago 2018
Modificato: Stephen23 il 30 Ago 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
  5 Commenti
MUKESH KUMAR
MUKESH KUMAR il 31 Ago 2018
sorry for that I found correction needed from my side, thanks alot.

Accedi per commentare.

Più risposte (1)

jonas
jonas il 30 Ago 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

Categorie

Scopri di più su Multidimensional Arrays in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by