SciPy 1.3.0 Versionshinweise#
SciPy 1.3.0 ist der Höhepunkt von 5 Monaten harter Arbeit. Es enthält viele neue Funktionen, zahlreiche Fehlerbehebungen, verbesserte Testabdeckung und bessere Dokumentation. Es gab einige 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 (um dies zu tun, führen Sie Ihren Code mit python -Wd aus und prüfen Sie auf DeprecationWarnings). Unsere Entwicklungsaufmerksamkeit wird sich nun auf Fehlerbehebungsversionen auf dem 1.3.x-Zweig und auf das Hinzufügen neuer Funktionen auf dem Master-Zweig verlagern.
Diese Version erfordert Python 3.5+ und NumPy 1.13.3 oder höher.
Für die Ausführung auf PyPy sind PyPy3 6.0+ und NumPy 1.15.0 erforderlich.
Highlights dieser Version#
Drei neue
stats-Funktionen, eine Überarbeitung vonpearsonrund eine exakte Berechnung des Kolmogorov-Smirnov-Zweistichproben-Tests.Eine neue Cython-API für Root-Finder für skalare Funktionen mit Grenzen in
scipy.optimize.Umfangreiche Leistungsverbesserungen bei der Indizierung von dünnen Matrizen
CSRundCSC.Unterstützung für die Interpolation von Rotationen mit kontinuierlicher Winkelgeschwindigkeit und Beschleunigung in
RotationSplinehinzugefügt.
Neue Funktionen#
scipy.interpolate Verbesserungen#
Eine neue Klasse CubicHermiteSpline wird eingeführt. Sie ist ein stückweise kubischer Interpolator, der beobachtete Werte und erste Ableitungen abgleicht. Bestehende kubische Interpolatoren CubicSpline, PchipInterpolator und Akima1DInterpolator wurden zu Unterklassen von CubicHermiteSpline.
scipy.io Verbesserungen#
Für das Attribut-Relationen-Datei-Format (ARFF) unterstützt scipy.io.arff.loadarff nun relationale Attribute.
scipy.io.mmread kann jetzt Matrix Market-Formatdateien mit Leerzeilen parsen.
scipy.linalg Verbesserungen#
Wrapper für ?syconv Routinen hinzugefügt, die eine symmetrische Matrix, gegeben durch eine dreieckige Matrixfaktorisierung, in zwei Matrizen umwandeln und umgekehrt.
scipy.linalg.clarkson_woodruff_transform verwendet jetzt einen Algorithmus, der auf Sparsity setzt. Dies kann bei dichten Eingabematrizen eine Beschleunigung von 60-90 Prozent bieten. Wirklich dünne Eingabematrizen sollten ebenfalls von dem verbesserten Sketch-Algorithmus profitieren, der jetzt korrekt in O(nnz(A)) Zeit läuft.
Neue Funktionen zur Berechnung symmetrischer Fiedler-Matrizen und Fiedler-Begleitmatrizen, genannt scipy.linalg.fiedler bzw. scipy.linalg.fiedler_companion, hinzugefügt. Diese können zur Nullstellensuche verwendet werden.
scipy.ndimage Verbesserungen#
Die Leistung des Gauß-Filters kann in einigen Fällen um eine Größenordnung verbessert werden, dank der Entfernung einer Abhängigkeit von np.polynomial. Dies kann beispielsweise scipy.ndimage.gaussian_filter beeinflussen.
scipy.optimize Verbesserungen#
Der Minimierer scipy.optimize.brute erhielt ein neues Schlüsselwort workers, das zur Parallelisierung der Berechnung verwendet werden kann.
Eine Cython-API für Root-Finder für skalare Funktionen mit Grenzen in scipy.optimize ist in einem neuen Modul scipy.optimize.cython_optimize über cimport verfügbar. Diese API kann mit nogil und prange verwendet werden, um über ein Array von Funktionsargumenten zu iterieren, um schneller ein Array von Wurzeln zu finden als mit reinem Python.
'interior-point' ist jetzt die Standardmethode für linprog, und 'interior-point' verwendet jetzt SuiteSparse für dünne Probleme, wenn die erforderlichen Scikits (scikit-umfpack und scikit-sparse) verfügbar sind. Bei Benchmark-Problemen (gh-10026) waren typischerweise Reduzierungen der Ausführungszeit um Faktoren von 2-3 zu verzeichnen. Außerdem wurde eine neue Methode method='revised simplex' hinzugefügt. Sie ist nicht so schnell oder robust wie method='interior-point', aber sie ist ein schnellerer, robusterer und ebenso genauer Ersatz für die ältere Methode method='simplex'.
differential_evolution kann jetzt eine Bounds-Klasse verwenden, um die Grenzen für das optimierende Argument einer Funktion anzugeben.
scipy.optimize.dual_annealing Leistungsverbesserungen im Zusammenhang mit der Vektorisierung einiger interner Codes.
scipy.signal Verbesserungen#
Zwei zusätzliche Methoden der Diskretisierung werden nun von scipy.signal.cont2discrete unterstützt: impulse und foh.
scipy.signal.firls verwendet jetzt schnellere Solver.
scipy.signal.detrend hat jetzt in einigen Fällen einen geringeren physischen Speicherbedarf, der mit dem neuen Schlüsselwortargument overwrite_data genutzt werden kann.
Das Argument pass_zero von scipy.signal.firwin akzeptiert jetzt neue String-Argumente, die die Spezifikation des gewünschten Filtertyps ermöglichen: 'bandpass', 'lowpass', 'highpass' und 'bandstop'.
scipy.signal.sosfilt kann eine verbesserte Leistung aufweisen, da die globale Interpreter-Sperre (GIL) im Algorithmus geringer gehalten wird.
scipy.sparse Verbesserungen#
Ein neues Schlüsselwort wurde zu csgraph.dijsktra hinzugefügt, das es Benutzern ermöglicht, den kürzesten Pfad zu JEDEM der übergebenen Indizes abzufragen, im Gegensatz zum kürzesten Pfad zu JEDEM übergebenen Index.
Die Leistung von scipy.sparse.linalg.lsmr wurde bei großen Problemen um etwa 10 Prozent verbessert.
Verbesserte Leistung und reduzierter physischer Speicherbedarf des Algorithmus, der von scipy.sparse.linalg.lobpcg verwendet wird.
Die Leistung der Fancy-Indizierung von dünnen Matrizen CSR und CSC wurde erheblich verbessert.
scipy.spatial Verbesserungen#
scipy.spatial.ConvexHull verfügt nun über ein Attribut good, das zusammen mit den QGn Qhull-Optionen verwendet werden kann, um festzustellen, welche äußeren Facetten einer konvexen Hülle von einem externen Abfragepunkt aus sichtbar sind.
scipy.spatial.cKDTree.query_ball_point wurde modernisiert, um einige neuere Cython-Funktionen zu nutzen, einschließlich GIL-Handling und Ausnahmeübersetzung. Ein Problem mit return_sorted=True und skalaren Abfragen wurde behoben, und ein neuer Modus namens return_length wurde hinzugefügt. return_length berechnet nur die Länge der zurückgegebenen Indizesliste, anstatt das Array jedes Mal zuzuweisen.
scipy.spatial.transform.RotationSpline wurde hinzugefügt, um die Interpolation von Rotationen mit kontinuierlichen Winkelgeschwindigkeiten und Beschleunigung zu ermöglichen.
scipy.stats Verbesserungen#
Eine neue Funktion zur Berechnung der Epps-Singleton-Teststatistik, scipy.stats.epps_singleton_2samp, wurde hinzugefügt, die auf kontinuierliche und diskrete Verteilungen angewendet werden kann.
Neue Funktionen scipy.stats.median_absolute_deviation und scipy.stats.gstd (geometrische Standardabweichung) wurden hinzugefügt. Die Methode scipy.stats.combine_pvalues unterstützt nun die p-Wert-Kombinationsmethoden pearson, tippett und mudholkar_george.
Die Algorithmen der Funktionen scipy.stats.ortho_group und scipy.stats.special_ortho_group rvs(dim) wurden von einer O(dim^4)-Implementierung auf eine O(dim^3)-Implementierung aktualisiert, was große Geschwindigkeitsverbesserungen für dim>100 bringt.
Eine Überarbeitung von scipy.stats.pearsonr, um einen robusteren Algorithmus zu verwenden, aussagekräftige Ausnahmen und Warnungen bei potenziell pathologischen Eingaben bereitzustellen und mindestens fünf separate gemeldete Probleme in der ursprünglichen Implementierung zu beheben.
Die Präzision von hypergeom.logcdf und hypergeom.logsf wurde verbessert.
Exakte Berechnung für den Kolmogorov-Smirnov (KS) Zweistichprobentest hinzugefügt, die die bisher approximierte Berechnung für den zweiseitigen Test stats.ks_2samp ersetzt. Ebenfalls hinzugefügt wurden ein einseitiger, zweistichprobiger KS-Test und ein Schlüsselwort alternative für stats.ks_2samp.
Abwärtsinkompatible Änderungen#
scipy.interpolate Änderungen#
Funktionen aus scipy.interpolate (spleval, spline, splmake und spltopp) und Funktionen aus scipy.misc (bytescale, fromimage, imfilter, imread, imresize, imrotate, imsave, imshow, toimage) wurden entfernt. Die erstgenannten Funktionen sind seit v0.19.0 als veraltet markiert und die letzteren seit v1.0.0. Ebenso sind Aliase aus scipy.misc (comb, factorial, factorial2, factorialk, logsumexp, pade, info, source, who), die seit v1.0.0 als veraltet markiert sind, entfernt. Die SciPy-Dokumentation für v1.1.0 kann verwendet werden, um die neuen Importpfade für die verschobenen Funktionen nachzuschlagen.
scipy.linalg Änderungen#
Für pinv, pinv2 und pinvh werden die Standard-Grenzwertwerte zur Konsistenz geändert (siehe die Dokumentation für die tatsächlichen Werte).
scipy.optimize Änderungen#
Die Standardmethode für linprog ist jetzt 'interior-point'. Die Robustheit und Geschwindigkeit der Methode haben ihren Preis: Lösungen sind möglicherweise nicht maschinengenau oder entsprechen nicht einer Ecke des durch die Einschränkungen definierten Polyeders. Um zur ursprünglichen Simplex-Methode zurückzukehren, fügen Sie das Argument method='simplex' hinzu.
scipy.stats Änderungen#
Zuvor führte ks_2samp(data1, data2) einen zweiseitigen Test durch und gab den approximierten p-Wert zurück. Die neue Signatur ks_2samp(data1, data2, alternative="two-sided", method="auto") führt standardmäßig immer noch den zweiseitigen Test durch, gibt aber den exakten p-Wert für kleine Stichproben und den approximierten Wert für große Stichproben zurück. method="asymp" wäre äquivalent zur alten Version, aber auto ist die bessere Wahl.
Weitere Änderungen#
Unser Tutorial wurde um einen neuen Abschnitt über globale Optimierer erweitert.
Es gab eine Überarbeitung der stats.distributions Tutorials.
scipy.optimize setzt nun korrekt das Konvergenzflag des Ergebnisses auf CONVERR, einen Konvergenzfehler, für skalare Root-Finder mit Grenzen, wenn die maximale Anzahl von Iterationen überschritten wurde, disp false ist und full_output true ist.
scipy.optimize.curve_fit schlägt nicht mehr fehl, wenn xdata und ydata unterschiedliche dtypes haben; beide werden jetzt automatisch auf float64 umgewandelt.
scipy.ndimage-Funktionen, einschließlich binary_erosion, binary_closing und binary_dilation, erfordern jetzt einen ganzzahligen Wert für die Anzahl der Iterationen, was eine Reihe von gemeldeten Problemen lindert.
Normale Approximation im Fall zero_method == "pratt" in scipy.stats.wilcoxon behoben.
Behebungen für falsche Wahrscheinlichkeiten, Broadcasting-Probleme und Thread-Sicherheit im Zusammenhang mit Stats-Verteilungen, die Membervariablen in _argcheck() setzen.
scipy.optimize.newton löst nun in folgenden Fällen korrekt eine RuntimeError aus: wenn Standardargumente verwendet werden und eine Ableitung von Nullwert erhalten wird (was ein Sonderfall des Konvergenzfehlers ist).
Eine Entwurfs-Toolchain-Roadmap ist nun verfügbar, die einen Kompatibilitätsplan mit Python-Versionen, C-Standards und NumPy-Versionen darlegt.