MATLAB Answers

create a array base on specific condition ?

조회 수: 9(최근 30일)
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

jonas
jonas 30 Aug 2018
Question unclear. Please show the complete output of your example. What do you want to do with the last value?
MUKESH KUMAR
MUKESH KUMAR 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
Stephen Cobeldick 30 Aug 2018
편집: Stephen Cobeldick 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

  댓글 수: 5

표시 이전 댓글 수: 2
MUKESH KUMAR
MUKESH KUMAR 31 Aug 2018
But in my case, I got -ve values when applied code to my problem.In B, first data is incorrect according to this but rest are negatives.
Stephen Cobeldick
Stephen Cobeldick 31 Aug 2018
@MUKESH KUMAR: you get negative values because although in your question you gave values which decrease in magnitude (so their differences are all positive), in your real A data all of the values increase in magnitude (so their differences are all negative). Lets have a look at some of the values:
>> B(find(B))
ans =
-1
-5
-3
-2
... lots more here
-3
-2
1
>> A(find(A))
ans =
1
2
7
10
12
13
... lots more here
128
131
133
In your question you wrote: "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]
Lets try your exact calculation method with the real A values:
B(6334) = A(6334) - A(6478) = -1
B(6478) = A(6478) - A(7487) = -5
B(7487) = A(7487) - A(7543) = -3
...etc
All are negative, all follow the method that you gave in your question, and all are exactly the values that are in B.
MUKESH KUMAR
MUKESH KUMAR 31 Aug 2018
sorry for that I found correction needed from my side, thanks alot.

댓글을 달려면 로그인하십시오.

추가 답변(1개)

jonas
jonas 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

  댓글 수: 0

댓글을 달려면 로그인하십시오.

태그

Community Treasure Hunt

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

Start Hunting!

Translated by