SciPy 0.13.0 Versionshinweise#
SciPy 0.13.0 ist der Höhepunkt von 7 Monaten harter Arbeit. Es enthält viele neue Funktionen, zahlreiche Fehlerbehebungen, verbesserte Testabdeckung und bessere Dokumentation. Es gab eine Reihe von Veraltungen und API-Änderungen in dieser Version, die nachfolgend 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 Fehlerbehebungsversionen der 0.13.x-Zweigstelle und auf das Hinzufügen neuer Funktionen zum Master-Zweig verlagern.
Diese Version erfordert Python 2.6, 2.7 oder 3.1-3.3 und NumPy 1.5.1 oder neuer. Höhepunkte dieser Version sind
Unterstützung für Fancy-Indexing und boolesche Vergleiche mit dünnbesetzten Matrizen
Interpolative Zerlegungen und Matrixfunktionen im linalg-Modul
Zwei neue Trust-Region-Löser für nicht-lineare Optimierung ohne Nebenbedingungen
Neue Funktionen#
scipy.integrate Verbesserungen#
N-dimensionale numerische Integration#
Eine neue Funktion scipy.integrate.nquad, die N-dimensionale Integrationsfunktionalität mit einer flexibleren Schnittstelle als dblquad und tplquad bietet, wurde hinzugefügt.
dopri* Verbesserungen#
Die Zwischenergebnisse der ODE-Löser der dopri-Familie können jetzt über eine solout-Callback-Funktion abgerufen werden.
scipy.linalg Verbesserungen#
Interpolative Zerlegungen#
Scipy enthält nun ein neues Modul scipy.linalg.interpolative mit Routinen zur Berechnung interpolativer Matrixzerlegungen (ID). Diese Funktion basiert auf dem ID-Softwarepaket von P.G. Martinsson, V. Rokhlin, Y. Shkolnisky und M. Tygert, das zuvor für Python im PymatrixId-Paket von K.L. Ho angepasst wurde.
Polare Zerlegung#
Eine neue Funktion scipy.linalg.polar zur Berechnung der polaren Zerlegung einer Matrix wurde hinzugefügt.
BLAS Level-3-Funktionen#
Die BLAS-Funktionen symm, syrk, syr2k, hemm, herk und her2k werden nun in scipy.linalg gewrappt.
Matrixfunktionen#
Mehrere Algorithmen für Matrixfunktionen wurden implementiert oder aktualisiert, basierend auf detaillierten Beschreibungen in aktuellen Veröffentlichungen von Nick Higham und seinen Co-Autoren. Dazu gehören die Matrixwurzel (sqrtm), der Matrixlogarithmus (logm), die Matrixexponentialfunktion (expm) und ihre Frechet-Ableitung (expm_frechet) sowie fraktionierte Matrixpotenzen (fractional_matrix_power).
scipy.optimize Verbesserungen#
Trust-Region-Algorithmen zur nicht-linearen Optimierung ohne Nebenbedingungen#
Die Funktion minimize erhielt zwei Trust-Region-Löser für die nicht-lineare Optimierung ohne Nebenbedingungen: dogleg und trust-ncg.
scipy.sparse Verbesserungen#
Boolesche Vergleiche und dünnbesetzte Matrizen#
Alle dünnbesetzten Matrixtypen unterstützen nun boolesche Daten und boolesche Operationen. Zwei dünnbesetzte Matrizen A und B können auf alle erwartete Weisen verglichen werden: A < B, A >= B, A != B, was ähnliche Ergebnisse wie dichte Numpy-Arrays liefert. Vergleiche mit dichten Matrizen und Skalaren werden ebenfalls unterstützt.
CSR- und CSC-Fancy-Indexing#
Die dünnbesetzten Matrixtypen Compressed Sparse Row und Column unterstützen nun Fancy-Indexing mit booleschen Matrizen, Slices und Listen. Wenn also A eine dünnbesetzte (CSC oder CSR) Matrix ist, können Sie Dinge tun wie
>>> A[A > 0.5] = 1 # since Boolean sparse matrices work
>>> A[:2, :3] = 2
>>> A[[1,2], 2] = 3
scipy.sparse.linalg Verbesserungen#
Die neue Funktion onenormest liefert eine untere Schranke für die 1-Norm eines linearen Operators und wurde nach Higham und Tisseur (2000) implementiert. Diese Funktion ist nicht nur für dünnbesetzte Matrizen nützlich, sondern kann auch verwendet werden, um die Norm von Produkten oder Potenzen dichter Matrizen abzuschätzen, ohne die Zwischenmatrix explizit aufzubauen.
Die multiplikative Wirkung der Matrixexponentialfunktion eines linearen Operators (expm_multiply) wurde gemäß der Beschreibung in Al-Mohy und Higham (2011) implementiert.
Abstrakte lineare Operatoren (scipy.sparse.linalg.LinearOperator) können nun miteinander multipliziert, addiert und potenziert werden, wobei neue lineare Operatoren entstehen. Dies ermöglicht eine einfachere Konstruktion von zusammengesetzten linearen Operationen.
scipy.spatial Verbesserungen#
Die Eckpunkte einer ConvexHull können nun über das Attribut vertices abgerufen werden, das in 2D eine korrekte Ausrichtung bietet.
scipy.signal Verbesserungen#
Die Kosinus-Fensterfunktion scipy.signal.cosine wurde hinzugefügt.
scipy.special Verbesserungen#
Neue Funktionen scipy.special.xlogy und scipy.special.xlog1py wurden hinzugefügt. Diese Funktionen können Code vereinfachen und beschleunigen, der x * log(y) berechnen muss, und liefern 0, wenn x == 0.
scipy.io Verbesserungen#
Reader für unformatierte Fortran-Dateien#
Die neue Klasse scipy.io.FortranFile erleichtert das Lesen von sequenziellen, unformatierten Dateien, die mit Fortran-Code geschrieben wurden.
scipy.io.wavfile Erweiterungen#
scipy.io.wavfile.write akzeptiert nun einen Dateipuffer. Zuvor wurde nur ein Dateiname akzeptiert.
scipy.io.wavfile.read und scipy.io.wavfile.write können nun Gleitkomma-WAV-Dateien verarbeiten.
scipy.interpolate Verbesserungen#
B-Spline-Ableitungen und -Stammfunktionen#
Die Funktionen scipy.interpolate.splder und scipy.interpolate.splantider zur Berechnung von B-Splines, die Ableitungen und Stammfunktionen von B-Splines darstellen, wurden hinzugefügt. Diese Funktionen sind auch in der klassenbasierten FITPACK-Schnittstelle als UnivariateSpline.derivative und UnivariateSpline.antiderivative verfügbar.
scipy.stats Verbesserungen#
Distributionen erlauben nun die Verwendung von Schlüsselwortparametern zusätzlich zu Positionsargumenten in allen Methoden.
Die Funktion scipy.stats.power_divergence wurde für die Cressie-Read-Power-Divergenz-Statistik und den Goodness-of-Fit-Test hinzugefügt. In dieser Familie von Statistiken ist der „G-Test“ (https://en.wikipedia.org/wiki/G-test) enthalten.
scipy.stats.mood akzeptiert nun mehrdimensionale Eingaben.
Eine Option wurde zu scipy.stats.wilcoxon für die Kontinuitätskorrektur hinzugefügt.
scipy.stats.chisquare hat nun ein axis-Argument.
scipy.stats.mstats.chisquare hat nun axis- und ddof-Argumente.
Veraltete Funktionen#
expm2 und expm3#
Die Matrixexponentialfunktionen scipy.linalg.expm2 und scipy.linalg.expm3 sind veraltet. Alle Benutzer sollten stattdessen die numerisch robustere Funktion scipy.linalg.expm verwenden.
scipy.stats Funktionen#
scipy.stats.oneway ist veraltet; stattdessen sollte scipy.stats.f_oneway verwendet werden.
scipy.stats.glm ist veraltet. scipy.stats.ttest_ind ist eine äquivalente Funktion; voll funktionsfähigere allgemeine (und verallgemeinerte) lineare Modellimplementierungen finden sich in statsmodels.
scipy.stats.cmedian ist veraltet; stattdessen sollte numpy.median verwendet werden.
Abwärtsinkompatible Änderungen#
LIL-Matrix-Zuweisung#
Das Zuweisen von Werten zu LIL-Matrizen mit zwei Index-Arrays funktioniert jetzt ähnlich wie das Zuweisen in ndarrays
>>> x = lil_matrix((3, 3))
>>> x[[0,1,2],[0,1,2]]=[0,1,2]
>>> x.todense()
matrix([[ 0., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 2.]])
anstatt das Ergebnis zu liefern
>>> x.todense()
matrix([[ 0., 1., 2.],
[ 0., 1., 2.],
[ 0., 1., 2.]])
Benutzer, die sich auf das bisherige Verhalten verlassen haben, müssen ihren Code überarbeiten. Das bisherige Verhalten wird durch x[numpy.ix_([0,1,2],[0,1,2])] = ... erzielt.
Veraltete radon-Funktion entfernt#
Die Funktion misc.radon, die in SciPy 0.11.0 als veraltet markiert wurde, wurde entfernt. Benutzer finden eine funktionsreichere radon-Funktion in scikit-image.
Veraltete Schlüsselwörter xa und xb aus stats.distributions entfernt#
Die Schlüsselwörter xa und xb, die seit 0.11.0 als veraltet markiert waren, wurden aus den Distributionen in scipy.stats entfernt.
Änderungen an MATLAB-Datei-Readern / -Writern#
Die wichtigste Änderung ist, dass 1D-Arrays in numpy nun zu Zeilenvektoren (Form 1, N) werden, wenn sie in eine MATLAB 5 Formatdatei gespeichert werden. Zuvor wurden 1D-Arrays als Spaltenvektoren (N, 1) gespeichert. Dies dient der Harmonisierung des Verhaltens beim Schreiben von MATLAB 4- und 5-Formaten und der Anpassung an die Standardeinstellungen von numpy und MATLAB – zum Beispiel gibt np.atleast_2d 1D-Arrays als Zeilenvektoren zurück.
Der Versuch, Arrays mit mehr als 2 Dimensionen im MATLAB 4-Format zu speichern, löst nun einen Fehler aus, anstatt das Array stillschweigend in 2D umzuformen.
scipy.io.loadmat('afile') suchte früher nach afile im Python-Systempfad (sys.path); jetzt sucht loadmat nur noch im aktuellen Verzeichnis nach einem relativen Dateinamen.
Weitere Änderungen#
Sicherheitskorrektur: scipy.weave verwendete unter bestimmten Umständen temporäre Verzeichnisse auf unsichere Weise.
Cython ist nun erforderlich, um *unveröffentlichte* Versionen von SciPy zu kompilieren. Die aus Cython-Quellen generierten C-Dateien sind nicht mehr im Git-Repository enthalten. Sie werden jedoch weiterhin in Quellcode-Releases mitgeliefert.
Der Code-Bestand wurde einer recht großen PEP8-Bereinigung unterzogen. Ein tox pep8-Befehl wurde hinzugefügt; neuer Code sollte diesen Testbefehl bestehen.
SciPy kann nicht mehr mit gfortran 4.1 kompiliert werden (zumindest nicht unter RH5), wahrscheinlich weil diese Compilerversion Entry-Konstrukte nicht gut unterstützt.