Wie definiert Python stückweise Funktionen? Das Folgende ist eine stückweise Funktion:
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)])
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('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)
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
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!