>백엔드 개발 >파이썬 튜토리얼 >Python에서 조각별 함수를 정의하는 방법

Python에서 조각별 함수를 정의하는 방법

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼원래의
2019-08-02 14:11:4116756검색

Python에서 조각별 함수를 정의하는 방법

Python에서 조각별 함수를 어떻게 정의하나요? 다음은 조각별 함수입니다.

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(&#39;log0: &#39;, toc - tic)
tic = time.time()
y = log_norm1(x)
toc = time.time()
print(&#39;log1: &#39;, toc - tic)
tic = time.time()
z = log_norm2(x)
toc = time.time()
print(&#39;log2: &#39;, toc - tic)

관찰 결과 인디케이터 기능을 활용한 방식이 여전히 가장 빠르지만, 조각별과 크게 다르지 않은 것으로 나타났습니다.

아아아아

위 내용은 Python에서 조각별 함수를 정의하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.