Python에서 조각별 함수를 어떻게 정의하나요? 다음은 조각별 함수입니다.
처음에는 요소별로만 수행할 수 있는 간단한 log_norm0 버전을 작성했습니다. 말할 필요도 없이 요소 수가 많은 벡터는 속도가 확실히 느려집니다.
나중에 분할의 두 가지 상황을 구별하기 위해 표시기 함수를 사용하려고 생각했고 log_norm1을 얻었습니다. 그러나 이 상황은 매우 특수하며 매번 성공적으로 구축될 수는 없습니다.
관련 권장사항: "Python Video Tutorial"
마지막으로 numpy에 Piecewise(x, condlist, funclist, *args, **kw) 함수가 있다는 것을 발견했는데, 이는 특별히 조각별 함수를 구성하는 데 사용됩니다. x는 입력이고, condlist는 분할 조건을 나타내며, funclist는 분할에 해당하는 처리 함수를 나타냅니다. 이는 log_norm2를 제공합니다.
# elementwise def log_norm0(x): if x >= 0: return np.log(x + 1) else: return - np.log(- x + 1) # indicator def log_norm1(x): # ind = np.where(x > 0, 1, 0) ind = (x > 0) return np.log(x * ind + 1) - np.log(- x * (1.0 - ind) + 1) # numpy.piecewise() def log_norm2(x): return np.piecewise(x, [x >= 0, x < 0], [lambda x: np.log(1 + x), lambda x: - np.log(1 - x)])
마지막으로 각 기능의 실행 시간을 관찰해 보세요.
tic = time.time() for i in range(x.size): y[i] = log_norm0(x[i]) toc = time.time() print('log0: ', toc - tic) tic = time.time() y = log_norm1(x) toc = time.time() print('log1: ', toc - tic) tic = time.time() z = log_norm2(x) toc = time.time() print('log2: ', toc - tic)
관찰 결과 인디케이터 기능을 활용한 방식이 여전히 가장 빠르지만, 조각별과 크게 다르지 않은 것으로 나타났습니다.
아아아아위 내용은 Python에서 조각별 함수를 정의하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!