2020년 5월 21일 목요일

zero-crossing 찾기

영교차점(zero-crossing) 찾기 (파이썬)

a = [1, 2, 1, 1, -3, -4, 7, 8, 9, 10, -2, 1, -3, 5, 6, 7, -10]

일 때,

In[61]: z = np.where(np.diff(np.sign(a)))[0]

In[61]: z

Out[62]: array([ 3,  5,  9, 10, 11, 12, 15], dtype=int64)

-------------------------------------------------------------------------------------------
a                  :  [ 1,  2,  1,  1, -3, -4,  7,  8,  9,10, -2,  1, -3,  5,  6,  7, -10]
k = np.sign(a)  :  [ 1,  1,  1,  1, -1, -1,  1,  1,  1,  1, -1,  1, -1,  1,  1,  1, -1]
d = np.diff(k)   :  [ 0,  0,  0, -2,  0,  2,  0,  0,  0, -2,  2, -2,  2,  0,  0, -2]
np.where(d)    : (array([ 3,  5,  9, 10, 11, 12, 15], dtype=int64),)
np.where(d)[0] : [ 3,  5,  9, 10, 11, 12, 15]
-------------------------------------------------------------------------------------------

np.diff()의 결과음수이면 데이터가 양수에서 음수로 바뀐 것이고,
np.diff()의 결과가 양수이면 데이터가 음수에서 양수로 바뀐 것이다.

np.where(d)라고 사용하면 d가 영이 아닌 모든 위치를 알려주며, 튜플로 반환된다.
따라서 결과만 얻고자 한다면 np.where(d)[0]로 사용한다.

np.where(d)[0]의 결과는 데이터에서 zero-crossing이 발생하는 시작점을 의미한다.
위의 예에서 "3"은 데이터가 4번째 샘플에서 5번째 샘플로 바뀌는 시점에서 zero-crossing이 발생함을 뜻한다.

댓글 없음:

댓글 쓰기

람다 표현식 (Lambda expression)

람다 표현식(Lambda expression)  람다 표현식으로 함수를 정의하고, 이를 변수에 할당하여 변수를 함수처럼 사용한다. (1) 람다 표현식       lambda <매개변수> : 수식      ※ 람다식을 실행하...