SciPy 0.17.0 Release Notes#
SciPy 0.17.0 ist die Krönung von 6 Monaten harter Arbeit. Es enthält viele neue Funktionen, zahlreiche Fehlerbehebungen, verbesserte Testabdeckung und bessere Dokumentation. Es gab eine Reihe von Deprekationen 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. Darüber hinaus wird sich unsere Entwicklungsaufmerksamkeit nun auf Fehlerbehebungsreleases für den Zweig 0.17.x und auf das Hinzufügen neuer Funktionen für den Hauptzweig verlagern.
Diese Version erfordert Python 2.6, 2.7 oder 3.2-3.5 und NumPy 1.6.2 oder höher.
Release-Highlights
Neue Funktionen für lineare und nichtlineare Kleinste-Quadrate-Optimierung mit Nebenbedingungen:
scipy.optimize.lsq_linearundscipy.optimize.least_squaresUnterstützung für das Anpassen mit Grenzen in
scipy.optimize.curve_fit.Signifikante Verbesserungen an
scipy.stats, die vielen Funktionen eine bessere Handhabung von Eingaben mit NaNs oder leeren Eingaben bieten, verbesserte Dokumentation und konsistentes Verhalten zwischenscipy.statsundscipy.stats.mstats.Signifikante Leistungsverbesserungen und neue Funktionalität in
scipy.spatial.cKDTree.
Neue Funktionen#
scipy.cluster Verbesserungen#
Eine neue Funktion scipy.cluster.hierarchy.cut_tree, die einen Schnittbaum aus einer Linkage-Matrix bestimmt, wurde hinzugefügt.
scipy.io Verbesserungen#
scipy.io.mmwrite hat Unterstützung für symmetrische dünn besetzte Matrizen erhalten.
scipy.io.netcdf hat Unterstützung für das Maskieren und Skalieren von Daten basierend auf Datenattributen erhalten.
scipy.optimize Verbesserungen#
Lösung für das lineare Zuordnungsproblem#
scipy.optimize.linear_sum_assignment ist eine neue Funktion zur Lösung des linearen Zuordnungsproblems. Sie verwendet den Ungarischen Algorithmus (Kuhn-Munkres).
Kleinste-Quadrate-Optimierung#
Eine neue Funktion für die *nichtlineare* Kleinste-Quadrate-Optimierung mit Nebenbedingungen wurde hinzugefügt: scipy.optimize.least_squares. Sie bietet mehrere Methoden: Levenberg-Marquardt für unbeschränkte Probleme und zwei Trust-Region-Methoden für beschränkte. Darüber hinaus bietet sie verschiedene Verlustfunktionen. Neue Trust-Region-Methoden unterstützen auch dünn besetzte Jacobimatrizen.
Eine neue Funktion für die *lineare* Kleinste-Quadrate-Optimierung mit Nebenbedingungen wurde hinzugefügt: scipy.optimize.lsq_linear. Sie bietet eine Trust-Region-Methode sowie eine Implementierung des Bounded-Variable Least-Squares (BVLS)-Algorithmus.
scipy.optimize.curve_fit unterstützt jetzt das Anpassen mit Grenzen.
scipy.signal Verbesserungen#
Ein Schlüsselwort mode wurde zu scipy.signal.spectrogram hinzugefügt, um es zu ermöglichen, andere Spektrogramme als die Leistungsspektraldichte zurückzugeben.
scipy.stats Verbesserungen#
Viele Funktionen in scipy.stats haben ein Schlüsselwort nan_policy erhalten, das festlegt, wie mit Eingaben mit NaNs umgegangen werden soll: NaNs propagieren, einen Fehler auslösen oder NaNs auslassen.
Viele Funktionen in scipy.stats wurden verbessert, um leere oder NaNs/infs enthaltende Eingabearrays korrekt zu behandeln.
Eine Reihe von Funktionen mit demselben Namen in scipy.stats und scipy.stats.mstats wurden so geändert, dass sie die gleiche Signatur und das gleiche Verhalten aufweisen. Einzelheiten finden Sie unter gh-5474.
scipy.stats.binom_test und scipy.stats.mannwhitneyu haben ein Schlüsselwort alternative erhalten, das die zu testende Hypothese angibt. Zukünftig werden alle Hypothesentestfunktionen dieses Schlüsselwort erhalten.
Für Methoden vieler kontinuierlicher Verteilungen wird nun komplexe Eingabe akzeptiert.
Die Matrix-Normalverteilung wurde als scipy.stats.matrix_normal implementiert.
scipy.sparse Verbesserungen#
Das Schlüsselwort axis wurde zu dünn besetzten Normen, scipy.sparse.linalg.norm, hinzugefügt.
scipy.spatial Verbesserungen#
scipy.spatial.cKDTree wurde teilweise für verbesserte Leistung neu geschrieben und mehrere neue Funktionen wurden hinzugefügt
die Methode
query_ball_pointwurde signifikant schnellerqueryundquery_ball_pointerhielten ein Schlüsselwortn_jobsfür parallele AusführungBuild- und Query-Methoden geben nun das GIL frei
vollständige Pickling-Unterstützung
Unterstützung für periodische Räume
die Methode
sparse_distance_matrixkann nun auch eine dünn besetzte Matrix als Typ zurückgeben
scipy.interpolate Verbesserungen#
Das Verhalten außerhalb der Grenzen von scipy.interpolate.interp1d wurde verbessert. Verwenden Sie ein zweielementiges Tupel für das Argument fill_value, um separate Füllwerte für Eingaben unterhalb und oberhalb des Interpolationsbereichs anzugeben. Lineare und nächste Interpolationsarten von scipy.interpolate.interp1d unterstützen Extrapolation über das Schlüsselwort fill_value="extrapolate".
fill_value kann auch auf array-ähnlich (oder ein zweielementiges Tupel von array-ähnlichen für separate untere und obere Werte) gesetzt werden, solange es korrekt an die nicht interpolierten Dimensionen eines Arrays broadcastet. Dies wurde von früheren Versionen von SciPy implizit unterstützt, aber die Unterstützung wurde nun formalisiert und vor der Verwendung auf Kompatibilität geprüft. Zum Beispiel könnte ein Satz von y-Werten zur Interpolation mit der Form (2, 3, 5), interpoliert entlang der letzten Achse (2), einen fill_value-Array mit der Form () (Singleton), (1,), (2, 1), (1, 3), (3,) oder (2, 3) akzeptieren; oder es kann ein 2-elementiges Tupel sein, um separate untere und obere Grenzen anzugeben, wobei jedes der beiden Tupel-Elemente den richtigen Broadcasting-Regeln folgt.
scipy.linalg Verbesserungen#
Der Standardalgorithmus für scipy.linalg.leastsq wurde geändert, um die LAPACK-Funktion *gelsd zu verwenden. Benutzer, die das vorherige Verhalten beibehalten möchten, können ein neues Schlüsselwort lapack_driver="gelss" verwenden (erlaubte Werte sind "gelss", "gelsd" und "gelsy").
Dünn besetzte Matrizen und lineare Operatoren von scipy.sparse unterstützen nun den Matmul-Operator (@), wenn verfügbar (Python 3.5+). Siehe [PEP 465](https://legacy.python.org/dev/peps/pep-0465/)
Eine neue Funktion scipy.linalg.ordqz für die QZ-Zerlegung mit Neuordnung wurde hinzugefügt.
Abgeschriebene Funktionen#
scipy.stats.histogram wird zugunsten von np.histogram abgeschrieben, das schneller ist und die gleiche Funktionalität bietet.
scipy.stats.threshold und scipy.mstats.threshold werden zugunsten von np.clip abgeschrieben. Siehe Problem #617 für Details.
scipy.stats.ss ist abgeschrieben. Dies ist eine Hilfsfunktion, die nicht für den Benutzer bestimmt ist. Außerdem ist der Name unklar. Siehe Problem #663 für Details.
scipy.stats.square_of_sums ist abgeschrieben. Dies ist ebenfalls eine Hilfsfunktion, die nicht für den Benutzer bestimmt ist. Siehe Probleme #665 und #663 für Details.
scipy.stats.f_value, scipy.stats.f_value_multivariate, scipy.stats.f_value_wilks_lambda und scipy.mstats.f_value_wilks_lambda sind abgeschrieben. Diese beziehen sich auf ANOVA, für die scipy.stats eine recht begrenzte Funktionalität bietet und diese Funktionen alleinstehend nicht sehr nützlich sind. Siehe Probleme #660 und #650 für Details.
scipy.stats.chisqprob ist abgeschrieben. Dies ist ein Alias. stats.chi2.sf sollte stattdessen verwendet werden.
scipy.stats.betai ist abgeschrieben. Dies ist ein Alias für special.betainc, der stattdessen verwendet werden sollte.
Rückwärts inkompatible Änderungen#
Die Funktionen stats.trim1 und stats.trimboth stellen nun sicher, dass die gestutzten Elemente die niedrigsten und/oder höchsten sind, je nach Fall. Zuvor wurde eine Segmentierung ohne mindestens teilweise Sortierung vorgenommen, was aber bei unsortierter Eingabe keinen Sinn ergab.
Wenn variable_names auf eine leere Liste gesetzt wird, gibt scipy.io.loadmat nun korrekt keine Werte zurück, anstatt den gesamten Inhalt der MAT-Datei.
Elementweise Multiplikation von dünn besetzten Matrizen gibt nun in allen Fällen ein dünn besetztes Ergebnis zurück. Zuvor würde die Multiplikation einer dünn besetzten Matrix mit einer dichten Matrix oder einem dichten Array eine dichte Matrix zurückgeben.
Die Funktion misc.lena wurde aufgrund von Lizenzinkompatibilitäten entfernt.
Der Konstruktor für sparse.coo_matrix akzeptiert nicht mehr (None, (m,n)), um eine Nullmatrix der Form (m,n) zu konstruieren. Diese Funktionalität wurde seit mindestens 2007 abgeschrieben und war bereits in der vorherigen SciPy-Version fehlerhaft. Verwenden Sie stattdessen coo_matrix((m,n)).
Die Cython-Wrapper in linalg.cython_lapack für die LAPACK-Routinen *gegs, *gegv, *gelsx, *geqpf, *ggsvd, *ggsvp, *lahrd, *latzm, *tzrqf wurden entfernt, da diese Routinen in der neuen LAPACK 3.6.0-Version nicht mehr vorhanden sind. Mit Ausnahme der Routinen *ggsvd und *ggsvp waren dies alles abgeschriebene Funktionen zugunsten von Routinen, die derzeit in unseren Cython-LAPACK-Wrappern vorhanden sind.
Da die LAPACK *gegv-Routinen in LAPACK 3.6.0 entfernt wurden. Die entsprechenden Python-Wrapper in scipy.linalg.lapack sind nun abgeschrieben und werden in einer zukünftigen Version entfernt. Die Quelldateien für diese Routinen wurden vorübergehend als Teil von scipy.linalg aufgenommen, damit SciPy gegen LAPACK-Versionen kompiliert werden kann, die diese abgeschriebenen Routinen nicht bereitstellen.
Weitere Änderungen#
Die HTML- und PDF-Dokumentation von Entwicklungsversionen von Scipy wird nun nach jedem zusammengeführten Pull Request automatisch neu erstellt.
scipy.constants wird auf die empfohlenen Werte von CODATA 2014 aktualisiert.
Die Verwendung von Funktionen aus scipy.fftpack innerhalb von Scipy wurde so geändert, dass PyFFTW scipy.fftpack-Funktionen einfach ersetzen kann (mit verbesserter Leistung). Siehe gh-5295 für Details.
Die imread-Funktionen in scipy.misc und scipy.ndimage wurden vereinheitlicht, wofür ein mode-Argument zu scipy.misc.imread hinzugefügt wurde. Außerdem wurden Fehler bei 1-Bit- und indizierten RGB-Bildformaten behoben.
runtests.py, das Entwicklungs-Skript zum Erstellen und Testen von Scipy, erlaubt nun das parallele Erstellen mit --parallel.