SciPy 1.2.0 Versionshinweise#
SciPy 1.2.0 ist der Höhepunkt von 6 Monaten harter Arbeit. Es enthält viele neue Funktionen, zahlreiche Fehlerbehebungen, verbesserte Testabdeckung und bessere Dokumentation. Es gab eine Reihe von Deprecations und API-Änderungen in dieser Version, die unten dokumentiert sind. Alle Benutzer werden ermutigt, auf diese Version zu aktualisieren, da es eine große Anzahl von Fehlerbehebungen und Optimierungen gibt. Vor dem Upgrade empfehlen wir den Benutzern, zu überprüfen, ob ihr eigener Code keine veraltete SciPy-Funktionalität verwendet (tun Sie dies, indem Sie Ihren Code mit python -Wd ausführen und nach DeprecationWarnings suchen). Unsere Entwicklungsaufmerksamkeit wird sich nun auf Fehlerbehebungsversionen des 1.2.x-Zweigs und auf das Hinzufügen neuer Funktionen im Master-Zweig verlagern.
Diese Version erfordert Python 2.7 oder 3.4+ und NumPy 1.8.2 oder neuer.
Hinweis
Dies wird die letzte SciPy-Version sein, die Python 2.7 unterstützt. Folglich wird die 1.2.x-Serie eine Langzeitunterstützungs-Version (LTS) sein; wir werden bis zum 1. Januar 2020 Fehlerbehebungen zurückportieren.
Für die Ausführung auf PyPy sind PyPy3 6.0+ und NumPy 1.15.0 erforderlich.
Highlights dieser Version#
Verbesserungen bei der 1-D-Wurzelsuche mit einem neuen Solver,
toms748, und einer neuen einheitlichen Schnittstelle,root_scalarneue
dual_annealingOptimierungsmethode, die stochastische und lokale deterministische Suche kombiniertein neuer Optimierungsalgorithmus,
shgo(simplicial homology global optimization), für ableitungsfreie Optimierungsproblemeeine neue Kategorie von quaternion-basierten Transformationen ist in
scipy.spatial.transformverfügbar
Neue Funktionen#
scipy.ndimage Verbesserungen#
Korrekte Spline-Koeffizientenberechnungen wurden für die Modi mirror, wrap und reflect von scipy.ndimage.rotate hinzugefügt.
scipy.fftpack Verbesserungen#
DCT-IV, DST-IV, DCT-I und DST-I Orthonormalisierungen werden nun in scipy.fftpack unterstützt.
scipy.interpolate Verbesserungen#
scipy.interpolate.pade akzeptiert nun ein neues Argument für den Grad des Zählers.
scipy.cluster Verbesserungen#
scipy.cluster.vq.kmeans2 erhielt eine neue Initialisierungsmethode, kmeans++.
scipy.special Verbesserungen#
Die Funktion softmax wurde zu scipy.special hinzugefügt.
scipy.optimize Verbesserungen#
Die eindimensionalen nichtlinearen Löser erhielten eine einheitliche Schnittstelle scipy.optimize.root_scalar, ähnlich der scipy.optimize.root Schnittstelle für mehrdimensionale Löser. scipy.optimize.root_scalar(f, bracket=[a ,b], method="brenth") ist äquivalent zu scipy.optimize.brenth(f, a ,b). Wenn keine method angegeben ist, wird eine geeignete basierend auf dem Bracket und der Anzahl verfügbarer Ableitungen ausgewählt.
Der sogenannte Algorithmus 748 von Alefeld, Potra und Shi zur Wurzelsuche in einem einschließenden Intervall wurde als scipy.optimize.toms748 hinzugefügt. Dies bietet garantierte Konvergenz zu einer Wurzel mit einer Konvergenzrate pro Funktionsauswertung von ungefähr 1,65 (für ausreichend gutartige Funktionen).
differential_evolution verfügt nun über die Schlüsselwörter updating und workers. Das erste wählt zwischen der kontinuierlichen Aktualisierung des besten Lösungsvektors (Standard) oder einmal pro Generation. Kontinuierliche Aktualisierung kann zu schnellerer Konvergenz führen. Das Schlüsselwort workers akzeptiert eine int oder eine Map-ähnliche aufrufbare Funktion und parallelisiert den Solver (mit dem Nebeneffekt, dass einmal pro Generation aktualisiert wird). Die Angabe einer int wertet die Testlösungen in N parallelen Teilen aus. Die Angabe einer Map-ähnlichen aufrufbaren Funktion ermöglicht die Verwendung anderer Parallelisierungsansätze (wie mpi4py oder joblib).
dual_annealing (und shgo unten) ist ein leistungsstarker neuer Allzweck-Globaloptimierungs-(GO)-Algorithmus. dual_annealing verwendet zwei Annealing-Prozesse, um die Konvergenz zum globalen Minimum einer objektiven mathematischen Funktion zu beschleunigen. Der erste Annealing-Prozess steuert die stochastische Markov-Ketten-Suche und der zweite Annealing-Prozess steuert die deterministische Minimierung. Dual Annealing ist also eine Hybridmethode, die stochastische und lokale deterministische Suchverfahren effizient nutzt.
shgo (simplicial homology global optimization) ist ein ähnlicher Algorithmus zur Lösung von Black-Box- und ableitungsfreien Optimierungsproblemen (DFO). Der Algorithmus konvergiert im Allgemeinen in endlicher Zeit zur globalen Lösung. Die Konvergenz gilt für nichtlineare Ungleichungs- und Gleichheitsbeschränkungen. Neben der Rückgabe eines globalen Minimums gibt der Algorithmus nach jeder Iteration auch alle anderen gefundenen globalen und lokalen Minima zurück. Dies macht ihn nützlich für die Erkundung von Lösungen in einem Bereich.
scipy.optimize.newton kann nun einen Skalar oder ein Array akzeptieren.
MINPACK-Nutzung ist jetzt Thread-sicher, so dass MINPACK + Callbacks auf mehreren Threads verwendet werden können.
scipy.signal Verbesserungen#
Digital Filter Design Funktionen enthalten nun einen Parameter zur Angabe der Abtastrate. Zuvor konnten digitale Filter nur mit normalisierter Frequenz angegeben werden, aber verschiedene Funktionen verwendeten unterschiedliche Skalen (z. B. 0 bis 1 für butter vs. 0 bis π für freqz), was zu Fehlern und Verwirrung führte. Mit dem Parameter fs können nun gewöhnliche Frequenzen direkt in Funktionen eingegeben werden, wobei die Normalisierung intern erfolgt.
find_peaks und verwandte Funktionen lösen keine Ausnahme mehr aus, wenn die Eigenschaften eines Peaks unerwartete Werte haben (z. B. eine Prominenz von 0). Stattdessen wird eine PeakPropertyWarning ausgegeben.
Das neue Schlüsselwortargument plateau_size wurde zu find_peaks hinzugefügt. plateau_size kann verwendet werden, um Peaks basierend auf der Länge der flachen Oberseite eines Peaks auszuwählen.
welch() und csd() Methoden in scipy.signal unterstützen nun die Berechnung eines medianen durchschnittlichen PSD unter Verwendung des Schlüsselworts average='mean'.
scipy.sparse Verbesserungen#
Die Methode scipy.sparse.bsr_matrix.tocsr wird nun direkt implementiert, anstatt über das COO-Format zu konvertieren, und die Methode scipy.sparse.bsr_matrix.tocsc wird nun ebenfalls über die CSR-Konvertierung statt über COO geleitet. Die Effizienz beider Konvertierungen ist nun verbessert.
Das Problem, bei dem SuperLU- oder UMFPACK-Solver bei Matrizen mit nicht kanonischem Format in scipy.sparse.linalg abstürzten, wurde behoben. Der Solver-Wrapper kanonisiert die Matrix bei Bedarf, bevor der SuperLU- oder UMFPACK-Solver aufgerufen wird.
Die Option largest von scipy.sparse.linalg.lobpcg() wurde korrigiert, um ein korrektes (und erwartetes) Verhalten zu haben. Die Reihenfolge der Eigenwerte wurde mit der des ARPACK-Solvers (eigs()) konsistent gemacht, d. h. aufsteigend für die kleinsten Eigenwerte und absteigend für die größten Eigenwerte.
Die Funktion scipy.sparse.random ist nun schneller und unterstützt auch Ganzzahl- und komplexe Werte, indem der entsprechende Wert an das Argument dtype übergeben wird.
scipy.spatial Verbesserungen#
Die Funktion scipy.spatial.distance.jaccard wurde modifiziert, um 0 anstelle von np.nan zurückzugeben, wenn zwei Vektoren, die nur Nullen enthalten, verglichen werden.
Unterstützung für die Jensen-Shannon-Distanz, die Quadratwurzel der Divergenz, wurde unter scipy.spatial.distance.jensenshannon hinzugefügt.
Ein optionales Schlüsselwort wurde der Funktion scipy.spatial.cKDTree.query_ball_point() hinzugefügt, um die zurückgegebenen Indizes zu sortieren oder nicht zu sortieren. Das Nicht-Sortieren der Indizes kann Aufrufe beschleunigen.
Eine neue Kategorie von quaternion-basierten Transformationen ist in scipy.spatial.transform verfügbar, einschließlich sphärischer linearer Interpolation von Rotationen (Slerp), Konvertierungen von und zu Quaternionen, Euler-Winkeln und allgemeinen Rotations- und Inversionsfähigkeiten (spatial.transform.Rotation) sowie gleichmäßiger zufälliger Stichproben von 3D-Rotationen (spatial.transform.Rotation.random).
scipy.stats Verbesserungen#
Die Yeo-Johnson-Potenztransformation wird nun unterstützt (yeojohnson, yeojohnson_llf, yeojohnson_normmax, yeojohnson_normplot). Im Gegensatz zur Box-Cox-Transformation kann die Yeo-Johnson-Transformation auch negative Werte akzeptieren.
Eine allgemeine Methode zum Ziehen von Zufallsvariaten basierend nur auf der Dichte wurde in der neuen Funktion rvs_ratio_uniforms hinzugefügt.
Die Yule-Simon-Verteilung (yulesimon) wurde hinzugefügt – dies ist eine neue diskrete Wahrscheinlichkeitsverteilung.
stats und mstats haben nun Zugriff auf eine neue Regressionsmethode, siegelslopes, einen robusten linearen Regressionsalgorithmus
scipy.stats.gaussian_kde hat nun die Fähigkeit, mit gewichteten Stichproben umzugehen, und sollte eine moderate Leistungsverbesserung aufweisen
Schätzungen von Levy-Stabil-Parametern, PDF- und CDF-Berechnungen werden nun für scipy.stats.levy_stable unterstützt.
Der Brunner-Munzel-Test ist nun als brunnermunzel in stats und mstats verfügbar.
scipy.linalg Verbesserungen#
scipy.linalg.lapack stellt nun die LAPACK-Routinen unter Verwendung des Rectangular Full Packed (RFP)-Speichers für obere dreieckige, untere dreieckige, symmetrische oder hermitesche Matrizen bereit; die Routinen zur Zerlegung von RZ von oberen trapezförmigen Matrizen sind nun ebenfalls verfügbar.
Veraltete Funktionen#
Die Funktionen hyp2f0, hyp1f2 und hyp3f0 in scipy.special wurden als veraltet markiert.
Abwärtsinkompatible Änderungen#
LAPACK-Version 3.4.0 oder neuer ist jetzt erforderlich. Das Erstellen mit Apple Accelerate wird nicht mehr unterstützt.
Die Funktion scipy.linalg.subspace_angles(A, B) liefert nun korrekte Ergebnisse für alle Winkel. Zuvor gab die Funktion nur für Winkel größer als π/4 korrekte Werte zurück.
Die Unterstützung für das Bento-Build-System wurde entfernt. Bento war seit mehreren Jahren nicht mehr gepflegt worden und hatte keine gute Unterstützung für Python 3 oder Wheels, daher war es an der Zeit, es zu entfernen.
Die erforderliche Signatur der Callback-Funktion des scipy.optimize.lingprog method=simplex hat sich geändert. Vor Beginn der Iteration wandelt der Simplex-Solver das Problem zunächst in eine Standardform um, die im Allgemeinen nicht dieselben Variablen oder Beschränkungen aufweist wie das vom Benutzer definierte Problem. Zuvor übergab der Simplex-Solver einer vom Benutzer bereitgestellten Callback-Funktion mehrere separate Argumente, wie z. B. den aktuellen Lösungsvektor xk, die sich auf dieses Standardproblem beziehen. Leider wurde die Beziehung zwischen dem Standardproblem und dem benutzerdefinierten Problem nicht dokumentiert, was den Nutzen der an die Callback-Funktion übergebenen Informationen einschränkte.
Neben zahlreichen Fehlerbehebungen übergibt der Simplex-Solver einer vom Benutzer bereitgestellten Callback-Funktion nun ein einzelnes OptimizeResult-Objekt, das Informationen enthält, die direkt dem vom Benutzer definierten Problem entsprechen. In zukünftigen Versionen kann dieses OptimizeResult-Objekt um zusätzliche Informationen erweitert werden, wie z. B. Variablen, die sich auf das Standardproblem beziehen, und Informationen über die Beziehung zwischen dem Standard- und dem benutzerdefinierten Problem.
Die Implementierung von scipy.sparse.random wurde geändert, was sich auf die numerischen Werte auswirkt, die sowohl für sparse.random als auch für sparse.rand für einige Matrixformen und einen gegebenen Seed zurückgegeben werden.
scipy.optimize.newton wird Halley's Methode nicht mehr in Fällen verwenden, in denen sie sich negativ auf die Konvergenz auswirkt.