SciPy 0.7.0 Versionshinweise#
SciPy 0.7.0 ist der Höhepunkt von 16 Monaten harter Arbeit. Es enthält viele neue Funktionen, zahlreiche Fehlerbehebungen, verbesserte Testabdeckung und bessere Dokumentation. Es gab eine Reihe von Verwerfungen 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 Fehlerbehebungsversionen für den 0.7.x-Zweig und auf das Hinzufügen neuer Funktionen zum Entwicklungs-Trunk verschieben. Diese Version erfordert Python 2.4 oder 2.5 und NumPy 1.2 oder höher.
Bitte beachten Sie, dass SciPy immer noch als "Beta"-Status gilt, während wir auf eine SciPy 1.0.0-Version hinarbeiten. Die Version 1.0.0 wird einen wichtigen Meilenstein in der Entwicklung von SciPy markieren, danach wird die Änderung der Paketstruktur oder API viel schwieriger sein. Obwohl diese Vor-1.0-Versionen als "Beta"-Status gelten, sind wir bestrebt, sie so fehlerfrei wie möglich zu gestalten. Zum Beispiel haben wir zusätzlich zu zahlreichen Fehlerbehebungen in dieser Version die Anzahl der Unit-Tests seit der letzten Version verdoppelt.
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.
Im letzten Jahr haben wir einen rapiden Anstieg der Beteiligung der Gemeinschaft und zahlreiche infrastrukturelle Verbesserungen gesehen, um die Hürde für Beiträge zu senken (z. B. explizitere Codierungsstandards, verbesserte Testinfrastruktur, bessere Dokumentationswerkzeuge). Im nächsten Jahr hoffen wir, dass sich dieser Trend fortsetzt und laden alle ein, sich stärker einzubringen.
Python 2.6 und 3.0#
Es wurde viel Aufwand betrieben, um SciPy mit Python 2.6 kompatibel zu machen. In dieser Hinsicht gibt es jedoch noch einige Probleme. Das Hauptproblem mit der Unterstützung von 2.6 ist NumPy. Unter UNIX (einschließlich Mac OS X) funktioniert NumPy 1.2.1 größtenteils, mit einigen Vorbehalten. Unter Windows gibt es Probleme im Zusammenhang mit dem Kompilierungsprozess. Die kommende NumPy 1.3-Version wird diese Probleme beheben. Alle verbleibenden Probleme mit der 2.6-Unterstützung für SciPy 0.7 werden in einer Fehlerbehebungsversion behoben.
Python 3.0 wird überhaupt nicht unterstützt; es erfordert, dass NumPy nach Python 3.0 portiert wird. Dies erfordert immense Anstrengungen, da viel C-Code portiert werden muss. Die Umstellung auf 3.0 wird noch geprüft; derzeit haben wir keinen Zeitplan oder Roadmap für diese Umstellung.
Umfangreiche Verbesserungen der Dokumentation#
Die SciPy-Dokumentation wurde stark verbessert. Sie können ein HTML-Referenzhandbuch online einsehen oder es als PDF-Datei herunterladen. Der neue Referenzführer wurde mit dem beliebten Sphinx-Tool erstellt.
Diese Version enthält auch ein aktualisiertes Tutorial, das seit der Portierung von SciPy auf NumPy im Jahr 2005 nicht mehr verfügbar war. Obwohl nicht umfassend, zeigt das Tutorial, wie mehrere wesentliche Teile von Scipy verwendet werden können. Es enthält auch die Dokumentation von ndimage aus dem numarray Handbuch.
Dennoch ist auf dem Gebiet der Dokumentation noch mehr Anstrengung erforderlich. Glücklicherweise ist die Mitarbeit an der SciPy-Dokumentation jetzt einfacher als zuvor: Wenn Sie feststellen, dass ein Teil davon verbessert werden muss und Sie uns helfen möchten, registrieren Sie sich bitte einen Benutzernamen in unserem webbasierten Dokumentationseditor unter https://docs.scipy.de/ und korrigieren Sie die Probleme.
Tests ausführen#
NumPy 1.2 führte ein neues Test-Framework ein, das auf nose basiert. Ab dieser Version verwendet auch SciPy das neue NumPy-Test-Framework. Die Nutzung des neuen Test-Frameworks erfordert die Version nose 0.10 oder neuer. Ein großer Vorteil des neuen Frameworks ist, dass es das Schreiben von Unit-Tests erheblich vereinfacht – was sich bereits ausgezahlt hat, angesichts des schnellen Anstiegs der Tests. Um die vollständige Testsuite auszuführen
>>> import scipy
>>> scipy.test('full')
Weitere Informationen finden Sie unter The NumPy/SciPy Testing Guide.
Wir haben auch unsere Testabdeckung erheblich verbessert. In der Version 0.6.0 gab es etwas mehr als 2.000 Unit-Tests; diese Version verdoppelt diese Zahl fast auf etwas mehr als 4.000 Unit-Tests.
SciPy erstellen#
Die Unterstützung für NumScons wurde hinzugefügt. NumScons ist ein vorläufiges neues Build-System für NumPy/SciPy, das SCons im Kern verwendet.
SCons ist ein Build-System der nächsten Generation, das darauf abzielt, das altehrwürdige Make mit der integrierten Funktionalität von autoconf/automake und ccache zu ersetzen. Scons ist in Python geschrieben und seine Konfigurationsdateien sind Python-Skripte. NumScons soll die benutzerdefinierte Version von distutils von NumPy ersetzen und fortschrittlichere Funktionalitäten bieten, wie z. B. autoconf, verbesserte Fortran-Unterstützung, mehr Tools und Unterstützung für die Zusammenarbeit von numpy.distutils/scons.
Sandbox entfernt#
Während der Portierung von SciPy auf NumPy im Jahr 2005 wurden mehrere Pakete und Module nach scipy.sandbox verschoben. Die Sandbox war ein Zwischenbereich für Pakete, die sich in rapider Entwicklung befanden und deren APIs im Fluss waren. Es war auch ein Ort, an dem fehlerhafter Code leben konnte. Die Sandbox hat ihren Zweck gut erfüllt, begann aber Verwirrung zu stiften. Daher wurde scipy.sandbox entfernt. Ein Großteil des Codes wurde nach scipy verschoben, einige Code wurde zu einem scikit gemacht, und der restliche Code wurde einfach gelöscht, da die Funktionalität durch anderen Code ersetzt worden war.
Sparse Matrizen#
Sparse Matrizen wurden umfassend verbessert. Es gibt jetzt Unterstützung für Integer-Datentypen wie int8, uint32 usw. Zwei neue Sparse-Formate wurden hinzugefügt
neue Klasse
dia_matrix: das Sparse-DIAgonal-Formatneue Klasse
bsr_matrix: das Block-CSR-Format
Mehrere neue Funktionen zur Erstellung von Sparse-Matrizen wurden hinzugefügt
sparse.kron: Sparse-Kronecker-Produktsparse.bmat: Sparse-Version vonnumpy.bmatsparse.vstack: Sparse-Version vonnumpy.vstacksparse.hstack: Sparse-Version vonnumpy.hstack
Extraktion von Untermatrizen und Nicht-Null-Werten wurde hinzugefügt
sparse.tril: untere Dreiecksmatrix extrahierensparse.triu: obere Dreiecksmatrix extrahierensparse.find: Nicht-Null-Werte und ihre Indizes
csr_matrix und csc_matrix unterstützen jetzt Slicing und Fancy-Indizierung (z. B. A[1:3, 4:7] und A[[3,2,6,8],:]). Konvertierungen zwischen allen Sparse-Formaten sind jetzt möglich
mittels Member-Funktionen wie
.tocsr()und.tolil()mittels der Member-Funktion
.asformat(), z. B.A.asformat('csr')mittels Konstruktoren
A = lil_matrix([[1,2]]); B = csr_matrix(A)
Alle Sparse-Konstruktoren akzeptieren jetzt dichte Matrizen und Listen von Listen. Zum Beispiel
A = csr_matrix( rand(3,3) )undB = lil_matrix( [[1,2],[3,4]] )
Die Handhabung von Diagonalen in der Funktion spdiags wurde geändert. Sie stimmt nun mit der MATLAB(TM)-Funktion gleichen Namens überein.
Zahlreiche Effizienzsteigerungen bei Formatkonvertierungen und Sparse-Matrix-Arithmetik wurden vorgenommen. Schließlich enthält diese Version zahlreiche Fehlerbehebungen.
Statistikpaket#
Statistische Funktionen für maskierte Arrays wurden hinzugefügt und sind über scipy.stats.mstats zugänglich. Die Funktionen ähneln ihren Pendants in scipy.stats, aber sie wurden noch nicht auf identische Schnittstellen und Algorithmen überprüft.
Mehrere Fehler wurden für statistische Funktionen behoben, darunter erhielten kstest und percentileofscore neue Schlüsselwortargumente.
Warnung vor Verwerfung für mean, median, var, std, cov und corrcoef hinzugefügt. Diese Funktionen sollten durch ihre NumPy-Gegenstücke ersetzt werden. Beachten Sie jedoch, dass sich einige der Standardoptionen zwischen den scipy.stats und NumPy-Versionen dieser Funktionen unterscheiden.
Zahlreiche Fehlerbehebungen für stats.distributions: alle generischen Methoden funktionieren jetzt korrekt, mehrere Methoden in einzelnen Verteilungen wurden korrigiert. Es bleiben jedoch einige Probleme mit höheren Momenten (skew, kurtosis) und Entropie bestehen. Der Maximum-Likelihood-Schätzer, fit, funktioniert bei einigen Verteilungen nicht auf Anhieb – in einigen Fällen müssen Startwerte sorgfältig gewählt werden, in anderen Fällen ist die generische Implementierung der Maximum-Likelihood-Methode möglicherweise nicht die numerisch geeignete Schätzmethode.
Wir erwarten weitere Fehlerbehebungen, Erhöhungen der numerischen Präzision und Verbesserungen in der nächsten Version von scipy.
Überarbeitung des IO-Pakets#
Der IO-Code in NumPy und SciPy wird umfassend überarbeitet. NumPy wird die Basis 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 als veraltet markiert und werden 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 Schreibfähigkeiten von NumPy, die Speicherabbildungsfähigkeiten oder Array-Methoden ersetzt. Andere wurden von SciPy nach NumPy verschoben, da grundlegende Array-Lese- und Schreibfähigkeiten nun von NumPy gehandhabt werden.
Die Matlab (TM)-Dateileser/-schreiber haben eine Reihe von Verbesserungen
Standardversion 5
v5-Schreiber für Strukturen, Zellen-Arrays und Objekte
v5-Leser/-Schreiber für Funktionshandles und 64-Bit-Integer
neues Schlüsselwortargument
struct_as_recordfürloadmat, das Struktur-Arrays in Matlab als Record-Arrays in NumPy lädtString-Arrays haben
dtype='U...'anstelle vondtype=objectloadmatentfernt keine Singleton-Dimensionen mehr, d. h.squeeze_me=Falseist Standard
Neues Modul für hierarchische Clusterbildung#
Dieses Modul fügt dem Paket scipy.cluster neue Funktionen für die hierarchische Clusterbildung hinzu. Die Funktionsschnittstellen ähneln denen der im MATLAB(TM)-Statistik-Toolbox bereitgestellten Funktionen, um eine einfachere Migration zum NumPy/SciPy-Framework zu ermöglichen. Implementierte Linkage-Methoden umfassen single, complete, average, weighted, centroid, median und ward.
Zusätzlich werden mehrere Funktionen zur Berechnung von Inkonsistenzstatistiken, kophenetischen Distanzen und maximalen Distanzen zwischen Nachkommen bereitgestellt. Die Funktionen fcluster und fclusterdata transformieren eine hierarchische Clusterbildung in einen Satz von flachen Clustern. Da diese flachen Cluster durch Zerschneiden des Baumes in einen Wald von Bäumen erzeugt werden, nimmt die Funktion leaders eine Verknüpfung und eine flache Clusterbildung und findet die Wurzel jedes Baumes im Wald. Die Klasse ClusterNode repräsentiert hierarchische Clusterbildungen als ein feldnavigierbares Baumobjekt. to_tree konvertiert eine matrixkodierte hierarchische Clusterbildung in ein ClusterNode-Objekt. Routinen zur Konvertierung zwischen MATLAB- und SciPy-Verknüpfungskodierungen werden bereitgestellt. Schließlich plottet eine Funktion dendrogram hierarchische Clusterbildungen als Dendrogramm unter Verwendung von matplotlib.
Neues Spatial-Paket#
Das neue Spatial-Paket enthält eine Sammlung räumlicher Algorithmen und Datenstrukturen, die für räumliche Statistik- und Clusteranwendungen nützlich sind. Es enthält schnell kompilierte Code für die Berechnung exakter und approximativer nächster Nachbarn sowie einen reinen Python-KD-Baum mit derselben Schnittstelle, der jedoch Annotationen und eine Vielzahl anderer Algorithmen unterstützt. Die API für beide Module kann sich etwas ändern, wenn die Benutzeranforderungen klarer werden.
Es enthält auch ein Modul distance, das eine Sammlung von Distanz- und Dissimilaritätsfunktionen zur Berechnung von Distanzen zwischen Vektoren enthält, was für räumliche Statistik, Clusterbildung und KD-Bäume nützlich ist. Die bereitgestellten Distanz- und Dissimilaritätsfunktionen umfassen Bray-Curtis, Canberra, Chebyshev, City Block, Cosine, Dice, Euclidean, Hamming, Jaccard, Kulsinski, Mahalanobis, Matching, Minkowski, Rogers-Tanimoto, Russell-Rao, Squared Euclidean, Standardized Euclidean, Sokal-Michener, Sokal-Sneath und Yule.
Die Funktion pdist berechnet paarweise Distanzen zwischen allen ungeordneten Paaren von Vektoren in einem Vektorsatz. Die Funktion cdist berechnet die Distanz für alle Paare von Vektoren im kartesischen Produkt zweier Vektorsätze. Paarweise Distanzmatrizen werden in kondensierter Form gespeichert; nur die obere Dreiecksmatrix wird gespeichert. squareform konvertiert Distanzmatrizen zwischen quadratischer und kondensierter Form.
Überarbeitetes fftpack-Paket#
FFTW2, FFTW3, MKL und DJBFFT-Wrapper wurden entfernt. Nur (NETLIB) fftpack bleibt erhalten. Indem wir uns auf ein Backend konzentrieren, hoffen wir, einfacher neue Funktionen – wie float32-Unterstützung – hinzufügen zu können.
Neues Konstantenpaket#
scipy.constants bietet eine Sammlung physikalischer Konstanten und Umrechnungsfaktoren. Diese Konstanten stammen aus den CODATA Recommended Values of the Fundamental Physical Constants: 2002. Sie sind auf physics.nist.gov/constants zu finden. Die Werte sind im Wörterbuch physical_constants als Tupel gespeichert, das den Wert, die Einheiten und die relative Präzision enthält – in dieser Reihenfolge. Alle Konstanten sind in SI-Einheiten, sofern nicht anders angegeben. Mehrere Hilfsfunktionen sind vorhanden.
Neues Modul für Radialbasisfunktionen#
SciPy.interpolate enthält nun ein Modul für Radialbasisfunktionen. Radialbasisfunktionen können zum Glätten/Interpolieren von gestreuten Daten in n-Dimensionen verwendet werden, sollten aber mit Vorsicht zur Extrapolation außerhalb des beobachteten Datenbereichs eingesetzt werden.
Neuer komplexer ODE-Integrator#
SciPy.integrate.ode enthält nun einen Wrapper für den ZVODE-Löser für gewöhnliche Differentialgleichungen mit komplexen Werten (von Peter N. Brown, Alan C. Hindmarsh und George D. Byrne).
Neuer Löser für verallgemeinerte symmetrische und hermitische Eigenwertprobleme#
SciPy.linalg.eigh enthält nun Wrapper für weitere LAPACK-Löser für symmetrische und hermitische Eigenwertprobleme. Benutzer können jetzt verallgemeinerte Probleme lösen, nur einen Bereich von Eigenwerten auswählen und einen schnelleren Algorithmus wählen, der jedoch mehr Speicher verbraucht. Die Signatur von scipy.linalg.eigh wurde entsprechend geändert.
Fehlerbehebungen im Interpolationspaket#
Die Form der Rückgabewerte von scipy.interpolate.interp1d war früher falsch, wenn interpolierte Daten mehr als 2 Dimensionen hatten und das Achsen-Schlüsselwort auf einen Wert ungleich dem Standard gesetzt war. Dies wurde behoben. Darüber hinaus gibt interp1d jetzt einen Skalar (0D-Array) zurück, wenn die Eingabe ein Skalar ist. Benutzer von scipy.interpolate.interp1d müssen möglicherweise ihren Code überarbeiten, wenn er auf dem früheren Verhalten beruht.
Aufräumen von Weave#
Es gab zahlreiche Verbesserungen an scipy.weave. blitz++ wurde vom Autor unter eine Lizenz gestellt, die mit der SciPy-Lizenz kompatibel ist. wx_spec.py wurde entfernt.
Bekannte Probleme#
Hier sind bekannte Probleme mit SciPy 0.7.0
Weave-Testfehler unter Windows: Diese sind bekannt und werden überarbeitet.
Weave-Testfehler mit gcc 4.3 (std::labs): Dies ist ein gcc 4.3-Fehler. Eine Abhilfe besteht darin, #include <cstdlib> in scipy/weave/blitz/blitz/funcs.h (Zeile 27) hinzuzufügen. Sie können die Änderung in der installierten SciPy (in site-packages) vornehmen.