So definieren Sie stückweise Funktionen in Python

爱喝马黛茶的安东尼
Freigeben: 2019-08-02 14:11:41
Original
16698 Leute haben es durchsucht

So definieren Sie stückweise Funktionen in Python

Wie definiert Python stückweise Funktionen? Das Folgende ist eine stückweise Funktion:

So definieren Sie stückweise Funktionen in Python

Ich habe zu Beginn eine einfache Version von log_norm0 geschrieben, die nur Element für Element ausgeführt werden kann. Es versteht sich von selbst, dass Vektoren mit einer großen Anzahl von Elementen definitiv langsamer werden.

Später dachte ich darüber nach, eine Indikatorfunktion zu verwenden, um die beiden Segmentierungssituationen zu unterscheiden, und erhielt log_norm1. Diese Situation ist jedoch etwas ganz Besonderes und kann nicht jedes Mal erfolgreich konstruiert werden.

Verwandte Empfehlungen: „Python-Video-Tutorial

Schließlich habe ich herausgefunden, dass es eine Funktion stückweise gibt(x, condlist, funclist, *args, **kw) In Numpy wird es speziell zum Erstellen segmentierter Funktionen verwendet. X ist die Eingabe, Condlist stellt die Segmentierungsbedingung dar und Funclist stellt die Verarbeitungsfunktion des entsprechenden Segments dar. Dies ergibt 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)])
Nach dem Login kopieren

Beobachten Sie abschließend die Laufzeit jeder Funktion.

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)
Nach dem Login kopieren

Beobachtungsergebnisse zeigen, dass die Methode mit der Indikatorfunktion immer noch die schnellste ist, sich aber nicht wesentlich von der stückweisen Methode unterscheidet.

log0:  33.59282732009888
log1:  0.4863457679748535
log2:  0.5942573547363281
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo definieren Sie stückweise Funktionen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!