I have 2 question: 1) find function can give the all n-th element (first or last) that meet a logical expression. i want only the second one, can i do it in one line. i need it for a for-loop, i want to start from the second one. now i do it by:
h = find(f==condition,2);
for i=h(end):length(g)
...
can we have a way to do it in 1 line (and not use variable h)?
2) i have a vector contain numbers, i want ignore all 0 and find the place of first one that change his sign from the previous ones.
for example, in array r=[0 0 -2 -3 0 0 4 0 5 -2], my result is the place of 4 (7th).
i use find and diff to find it but it give me 3 (the place in vector not include 0):
find(diff(sign(r~=0))~=0,1)+1
how can i find it?

 채택된 답변

Henrik
Henrik 2014년 12월 7일

1 개 추천

I can't think of a way to do your question 1 in one line of code, but is it really that important to remove one line of code?
For your question #2, this should do the trick. I suppose there's a way to do it with fewer lines, but this was the best I could come up with.
r=[0 0 -2 -3 0 0 4 0 5 -2];
r_no_zero=r(r~=0);
r_sign_change=find(diff(sign(r_no_zero),1))+1;
find(r==r_no_zero(r_sign_change(1)))

댓글 수: 1

Yona
Yona 2014년 12월 8일
편집: Yona 2014년 12월 8일
#1 is not important it only a question of aesthetic and i ask to see if MATLAB has a way that i don't know to do it.
#2 it's good. finally, i do it different:
r=[0 0 -2 -3 0 0 4 0 5 -2];
r_no_zero=r(find(r~=0,1));
find(sign(r)~=sign(r_no_zero) & r ~= 0,1)
i don't like the double use on find for this...
thank you, hope to get some more answer.

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

추가 답변 (0개)

카테고리

도움말 센터 및 File Exchange에서 Introduction to Installation and Licensing에 대해 자세히 알아보기

제품

태그

질문:

2014년 12월 7일

편집:

2014년 12월 8일

Community Treasure Hunt

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

Start Hunting!

Translated by