SciPy 0.8.0 Versionshinweise#
SciPy 0.8.0 ist der Höhepunkt von 17 Monaten harter Arbeit. Es enthält viele neue Funktionen, zahlreiche Fehlerbehebungen, verbesserte Testabdeckung und eine bessere Dokumentation. Es gab eine Reihe von Kennzeichnungen als veraltet 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 Entwicklung nun auf Fehlerbehebungs-Releases des 0.8.x-Zweigs und auf die Hinzufügung neuer Funktionen im Entwicklungs-Trunk konzentrieren. Diese Version erfordert Python 2.4 - 2.6 und NumPy 1.4.1 oder neuer.
Bitte beachten Sie, dass SciPy immer noch als "Beta"-Status gilt, während wir auf eine SciPy 1.0.0-Version hinarbeiten. Die 1.0.0-Version wird einen wichtigen Meilenstein in der Entwicklung von SciPy markieren, danach wird es viel schwieriger sein, die Paketstruktur oder API zu ändern. Obwohl diese Vor-1.0-Versionen als "Beta"-Status gelten, sind wir bestrebt, sie so fehlerfrei wie möglich zu gestalten.
Bis zur Version 1.0 werden wir jedoch die Funktionalität, Organisation und Schnittstelle aggressiv überprüfen und verfeinern. Dies geschieht, um das Paket so kohärent, intuitiv und nützlich wie möglich zu gestalten. Um dies zu erreichen, benötigen wir Hilfe von der Benutzergemeinschaft. Insbesondere benötigen wir Feedback zu allen Aspekten des Projekts – von den Algorithmen, die wir implementieren, bis hin zu Details über die Aufruf-Signaturen unserer Funktionen.
Python 3#
Die Kompatibilität mit Python 3 ist geplant und derzeit technisch machbar, da NumPy portiert wurde. Da jedoch das für Python 3 kompatible NumPy 1.5 noch nicht veröffentlicht wurde, ist die Unterstützung für Python 3 in SciPy in SciPy 0.8 noch nicht enthalten. SciPy 0.9, geplant für Herbst 2010, wird sehr wahrscheinlich experimentelle Unterstützung für Python 3 enthalten.
Umfangreiche Verbesserungen der Dokumentation#
Die SciPy-Dokumentation wurde erheblich verbessert.
Als veraltet markierte Funktionen#
Vertauschen von Eingaben für Korrelationsfunktionen (scipy.signal)#
Betrifft correlate, correlate2d, convolve und convolve2d. Wenn die zweite Eingabe größer ist als die erste, werden die Eingaben vertauscht, bevor die zugrundeliegende Berechnungsroutine aufgerufen wird. Dieses Verhalten ist veraltet und wird in SciPy 0.9.0 entfernt.
Veralteter Code als veraltet markiert (scipy.misc)#
Die Module helpmod, ppimport und pexec aus scipy.misc sind veraltet. Sie werden aus SciPy in Version 0.9 entfernt.
Zusätzliche Kennzeichnungen als veraltet#
linalg: Die Funktion solveh_banded gibt derzeit ein Tupel zurück, das die Cholesky-Zerlegung und die Lösung des linearen Systems enthält. In SciPy 0.9 wird nur die Lösung zurückgegeben.
Die Funktion constants.codata.find löst eine `DeprecationWarning` aus. In SciPy Version 0.8.0 wurde das Schlüsselwortargument 'disp' zur Funktion hinzugefügt, mit dem Standardwert 'True'. In 0.9.0 wird der Standardwert 'False' sein.
Das Schlüsselwortargument qshape von signal.chirp ist veraltet. Verwenden Sie stattdessen das Argument vertex_zero.
Das Übergeben der Koeffizienten eines Polynoms als Argument f0 an signal.chirp ist veraltet. Verwenden Sie stattdessen die Funktion signal.sweep_poly.
Das Modul io.recaster ist veraltet und wird in 0.9.0 entfernt.
Neue Funktionen#
DCT-Unterstützung (scipy.fftpack)#
Neue Real-Transformationen wurden hinzugefügt, nämlich `dct` und `idct` für die diskrete Kosinustransformation; Typ I, II und III sind verfügbar.
Unterstützung für einfache Genauigkeit bei FFT-Funktionen (scipy.fftpack)#
FFT-Funktionen können jetzt auch Eingaben mit einfacher Genauigkeit verarbeiten: `fft(x)` gibt ein Array mit einfacher Genauigkeit zurück, wenn `x` einfache Genauigkeit hat.
Derzeit wird für FFT-Größen, die keine Teiler von 2, 3 und 5 sind, die Transformation intern in doppelter Genauigkeit berechnet, um Rundungsfehler in FFTPACK zu vermeiden.
Korrelationsfunktionen implementieren nun die übliche Definition (scipy.signal)#
Die Ausgaben sollten nun ihren MATLAB- und R-Entsprechungen entsprechen und das tun, was die meisten Leute erwarten, wenn das Argument `old_behavior=False` übergeben wird.
correlate, convolve und ihre 2D-Gegenstücke vertauschen ihre Eingaben nicht mehr abhängig von ihrer relativen Form;
Korrelationsfunktionen konjugieren nun ihr zweites Argument während der Berechnung der verschobenen Summenprodukte, was der üblichen Definition von Korrelation entspricht.
Hinzufügungen und Änderungen an LTI-Funktionen (scipy.signal)#
Die Funktionen impulse2 und step2 wurden zu
scipy.signalhinzugefügt. Sie verwenden die Funktion scipy.signal.lsim2, um die Impuls- und Sprungantwort eines Systems zu berechnen.Die Funktion scipy.signal.lsim2 wurde geändert, um zusätzliche Schlüsselwortargumente an den ODE-Löser weiterzuleiten.
Verbesserte Wellenformgeneratoren (scipy.signal)#
Mehrere Verbesserungen an der Funktion chirp in scipy.signal wurden vorgenommen.
Die Wellenform, die generiert wurde, wenn method="logarithmic", wurde korrigiert; sie erzeugt nun eine Wellenform, die auch als "exponentielle" oder "geometrische" Chirp-Wellenform bekannt ist. (Siehe https://en.wikipedia.org/wiki/Chirp.)
Eine neue chirp-Methode, "hyperbolic", wurde hinzugefügt.
Anstelle des Schlüsselworts qshape verwendet chirp nun das Schlüsselwort vertex_zero, ein Boolescher Wert.
chirp verarbeitet kein beliebiges Polynom mehr. Diese Funktionalität wurde in eine neue Funktion, sweep_poly, verschoben.
Eine neue Funktion, sweep_poly, wurde hinzugefügt.
Neue Funktionen und weitere Änderungen in scipy.linalg#
Die Funktionen cho_solve_banded, circulant, companion, hadamard und leslie wurden zu scipy.linalg hinzugefügt.
Die Funktion block_diag wurde erweitert, um neben den üblichen 2D-Argumenten auch Skalar- und 1D-Argumente zu akzeptieren.
Neue Funktion und Änderungen in scipy.optimize#
Die Funktion curve_fit wurde hinzugefügt; sie nimmt eine Funktion und verwendet nichtlineare Kleinste-Quadrate-Anpassung, um diese an die bereitgestellten Daten anzupassen.
Die Funktionen leastsq und fsolve geben nun ein Array der Größe eins anstelle eines Skalars zurück, wenn nach einem einzelnen Parameter gesucht wird.
Neuer Löser für dünnbesetzte Kleinste-Quadrate-Probleme#
Die Funktion lsqr wurde zu scipy.sparse hinzugefügt. Diese Routine findet eine Lösung im Sinne der kleinsten Quadrate für ein großes, dünnbesetztes lineares Gleichungssystem.
ARPACK-basierte dünnbesetzte SVD#
Eine einfache Implementierung der SVD für dünnbesetzte Matrizen ist in `scipy.sparse.linalg._eigen.arpack` verfügbar. Sie basiert auf der Verwendung eines symmetrischen Lösers auf <A, A> und ist daher möglicherweise nicht sehr präzise.
Alternativverhalten für scipy.constants.find verfügbar
Das Schlüsselwortargument disp wurde zur Funktion scipy.constants.find hinzugefügt, mit dem Standardwert True. Wenn disp True ist, ist das Verhalten dasselbe wie in SciPy Version 0.7. Wenn es False ist, gibt die Funktion die Liste der Schlüssel aus, anstatt sie zu drucken. (In SciPy Version 0.9 wird der Standardwert umgekehrt.)
Unvollständige dünnbesetzte LU-Zerlegungen#
SciPy wickelt nun SuperLU Version 4.0 ab, die unvollständige dünnbesetzte LU-Zerlegungen unterstützt. Diese sind über scipy.sparse.linalg.spilu zugänglich. Das Upgrade auf SuperLU 4.0 behebt auch einige bekannte Fehler.
Schnellerer MATLAB-Dateileser und Änderung des Standardverhaltens#
Wir haben den MATLAB-Dateileser in Cython neu geschrieben, und er sollte nun MATLAB-Dateien mit ungefähr der gleichen Geschwindigkeit lesen wie MATLAB selbst.
Der Leser liest benannte und anonyme MATLAB-Funktionen, kann sie aber nicht schreiben.
Bis SciPy 0.8.0 haben wir MATLAB-Strukturen als NumPy-Objekt-Arrays zurückgegeben, wobei die Objekte Attribute mit den Namen der Strukturfelder hatten. Ab 0.8.0 geben wir MATLAB-Strukturen als NumPy-strukturierte Arrays zurück. Sie können das ältere Verhalten erhalten, indem Sie das optionale Schlüsselwortargument struct_as_record=False für scipy.io.loadmat und ähnliche Funktionen verwenden.
Es gibt eine Inkonsistenz im MATLAB-Dateischreiber, da er NumPy 1D-Arrays als Spaltenvektoren in MATLAB 5-Dateien und als Zeilenvektoren in MATLAB 4-Dateien schreibt. Wir werden dies in der nächsten Version ändern, sodass beide Zeilenvektoren schreiben. Beim Aufruf des Schreibers wird eine FutureWarning ausgegeben, um vor dieser Änderung zu warnen. Vorerst empfehlen wir die Verwendung des Schlüsselwortarguments oned_as='row' für scipy.io.savemat und ähnliche Funktionen.
Schnellere Auswertung orthogonaler Polynome#
Werte orthogonaler Polynome können mit neuen vektorisierten Funktionen in scipy.special ausgewertet werden: eval_legendre, eval_chebyt, eval_chebyu, eval_chebyc, eval_chebys, eval_jacobi, eval_laguerre, eval_genlaguerre, eval_hermite, eval_hermitenorm, eval_gegenbauer, eval_sh_legendre, eval_sh_chebyt, eval_sh_chebyu, eval_sh_jacobi. Dies ist schneller als die Konstruktion der vollständigen Koeffizientenrepräsentation der Polynome, die zuvor die einzige verfügbare Methode war.
Beachten Sie, dass die bisherigen Routinen für orthogonale Polynome nun auch diese Funktion aufrufen, wenn möglich.
Lambert-W-Funktion#
scipy.special.lambertw kann nun zur Auswertung der Lambert-W-Funktion verwendet werden.
Verbesserte hypergeometrische 2F1-Funktion#
Die Implementierung von scipy.special.hyp2f1 für reelle Parameter wurde überarbeitet. Die neue Version sollte genaue Werte für alle reellen Parameter liefern.
Flexiblere Schnittstelle für Radialbasisfunktions-Interpolation#
Die Klasse scipy.interpolate.Rbf akzeptiert nun zusätzlich zu den integrierten Radialbasisfunktionen, die mit einem String ausgewählt werden können, auch eine aufrufbare Funktion als Eingabe für das Argument "function".
Entfernte Funktionen#
scipy.stsci: das Paket wurde entfernt
Das Modul scipy.misc.limits wurde entfernt.
scipy.io#
Der IO-Code in NumPy und SciPy wird umfassend überarbeitet. NumPy wird den grundlegenden Code für das Lesen und Schreiben von NumPy-Arrays enthalten, während SciPy Dateileser und -schreiber für verschiedene Datenformate (Daten, Audio, Video, Bilder, MATLAB usw.) beherbergen wird.
Mehrere Funktionen in scipy.io wurden in der Version 0.8.0 entfernt, darunter: npfile, save, load, create_module, create_shelf, objload, objsave, fopen, read_array, write_array, fread, fwrite, bswap, packbits, unpackbits und convert_objectarray. Einige dieser Funktionen wurden durch die Roh-Lese- und Schreibfunktionen von NumPy, Speicherabbildungsfunktionen oder Array-Methoden ersetzt. Andere wurden von SciPy nach NumPy verschoben, da die grundlegende Array-Lese- und Schreibfähigkeit nun von NumPy gehandhabt wird.