SciPy 0.18.0 Versionshinweise#
SciPy 0.18.0 ist das Ergebnis von 6 Monaten harter Arbeit. Es enthält viele neue Funktionen, zahlreiche Fehlerbehebungen, verbesserte Testabdeckung und bessere Dokumentation. In dieser Version gab es eine Reihe von Deprecation-Hinweisen und API-Änderungen, 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 Fehlerbehebungs-Releases auf dem 0.19.x-Zweig und auf die Hinzufügung neuer Funktionen auf dem Master-Zweig verlagern.
Diese Version erfordert Python 2.7 oder 3.4-3.5 und NumPy 1.7.1 oder neuer.
Highlights dieser Version sind
Ein neuer ODE-Löser für Zweipunkt-Randwertprobleme, scipy.optimize.solve_bvp.
Eine neue Klasse, CubicSpline, für kubische Spline-Interpolation von Daten.
N-dimensionale Tensorproduktpolynome,
scipy.interpolate.NdPPoly.Sphärische Voronoi-Diagramme,
scipy.spatial.SphericalVoronoi.Unterstützung für zeitdiskrete lineare Systeme,
scipy.signal.dlti.
Neue Funktionen#
scipy.integrate Verbesserungen#
Ein Löser für Zweipunkt-Randwertprobleme von ODE-Systemen wurde in scipy.integrate.solve_bvp implementiert. Der Löser erlaubt nicht getrennte Randbedingungen, unbekannte Parameter und bestimmte singuläre Terme. Er findet eine C1-kontinuierliche Lösung mithilfe eines Kollokationsalgorithmus vierter Ordnung.
scipy.interpolate Verbesserungen#
Kubische Spline-Interpolation ist jetzt über scipy.interpolate.CubicSpline verfügbar. Diese Klasse repräsentiert ein stückweise kubisches Polynom, das durch gegebene Punkte verläuft und C2-kontinuierlich ist. Sie wird auf jedem Segment im Standard-Polynombasis dargestellt.
Eine Darstellung von n-dimensionalen Tensorprodukt-Stückweise-Polynomen ist als Klasse scipy.interpolate.NdPPoly verfügbar.
Univariate Stückweise-Polynomklassen, PPoly und Bpoly, können nun auf periodischen Domänen ausgewertet werden. Verwenden Sie dazu das Schlüsselwortargument extrapolate="periodic".
scipy.fftpack Verbesserungen#
scipy.fftpack.next_fast_len Funktion berechnet die nächste "reguläre" Zahl für FFTPACK. Das Auffüllen der Eingabe auf diese Länge kann für scipy.fftpack.fft eine deutliche Leistungssteigerung bringen.
scipy.signal Verbesserungen#
Das Resampling mittels Polyphasenfilterung wurde in der Funktion scipy.signal.resample_poly implementiert. Diese Methode übersampelt ein Signal, wendet einen Nullphasen-FIR-Tiefpassfilter an und untersampelt mithilfe von scipy.signal.upfirdn (die ebenfalls neu in 0.18.0 ist). Diese Methode kann für einige Signale schneller sein als die FFT-basierte Filterung, die von scipy.signal.resample bereitgestellt wird.
scipy.signal.firls, das FIR-Filter mithilfe von Least-Squares-Fehlerminimierung konstruiert, wurde hinzugefügt.
scipy.signal.sosfiltfilt, das eine Vorwärts-Rückwärts-Filterung wie scipy.signal.filtfilt, aber für Zweite-Ordnungs-Abschnitte, durchführt, wurde hinzugefügt.
Diskrete zeitliche lineare Systeme#
scipy.signal.dlti stellt eine Implementierung von diskreten zeitlichen linearen Systemen bereit. Entsprechend haben die Klassen StateSpace, TransferFunction und ZerosPolesGain das neue Schlüsselwort dt erhalten, das zur Erstellung von diskreten Instanzen der entsprechenden Systemdarstellung verwendet werden kann.
scipy.sparse Verbesserungen#
Die Funktionen sum, max, mean, min, transpose und reshape in scipy.sparse wurden um zusätzliche Argumente und Funktionalität erweitert, um die Kompatibilität mit analog definierten Funktionen in numpy zu verbessern.
Sparse Matrizen haben jetzt eine count_nonzero Methode, die die Anzahl der Nicht-Null-Elemente in der Matrix zählt. Im Gegensatz zu getnnz() und der nnz-Eigenschaft, die die Anzahl der gespeicherten Einträge (die Länge des Datenattributs) zurückgeben, zählt diese Methode die tatsächliche Anzahl der Nicht-Null-Einträge in den Daten.
scipy.optimize Verbesserungen#
Die Implementierung der Nelder-Mead-Minimierung, scipy.minimize(…, method=”Nelder-Mead”), hat ein neues Schlüsselwort, initial_simplex, erhalten, das verwendet werden kann, um das Startsimplex für den Optimierungsprozess anzugeben.
Die anfängliche Schrittgrößenauswahl in den CG- und BFGS-Minimatoren wurde verbessert. Wir erwarten, dass diese Änderung die numerische Stabilität der Optimierung in einigen Fällen verbessern wird. Details siehe Pull-Request gh-5536.
Die Behandlung von unendlichen Grenzen in der SLSQP-Optimierung wurde verbessert. Wir erwarten, dass diese Änderung die numerische Stabilität der Optimierung in einigen Fällen verbessern wird. Details siehe Pull-Request gh-6024.
Eine umfangreiche Suite von Benchmarks für globale Optimierung wurde zu scipy/benchmarks/go_benchmark_functions hinzugefügt. Details siehe Pull-Request gh-4191.
Nelder-Mead und Powell Minimierung werden nun nur dann Standardwerte für maximale Iterationen oder Funktionsauswertungen setzen, wenn kein Limit vom Aufrufer festgelegt wurde. In einigen Fällen mit einer langsam konvergierenden Funktion und nur einem gesetzten Limit kann die Minimierung länger dauern als in früheren Versionen und ist daher wahrscheinlicher, eine Konvergenz zu erreichen. Siehe Issue gh-5966.
scipy.stats Verbesserungen#
Die Trapezverteilung wurde als scipy.stats.trapz implementiert. Die schiefe Normalverteilung wurde als scipy.stats.skewnorm implementiert. Die Burr-Typ-XII-Verteilung wurde als scipy.stats.burr12 implementiert. Drei- und vierparametrige Kappa-Verteilungen wurden als scipy.stats.kappa3 bzw. scipy.stats.kappa4 implementiert.
Die neue Funktion scipy.stats.iqr berechnet die Interquartilsspanne einer Verteilung.
Zufallsmatrizen#
scipy.stats.special_ortho_group und scipy.stats.ortho_group stellen Generatoren für zufällige Matrizen in den Gruppen SO(N) bzw. O(N) bereit. Sie generieren Matrizen nach der Haar-Verteilung, der einzigen gleichmäßigen Verteilung auf diesen Gruppenmannigfaltigkeiten.
scipy.stats.random_correlation stellt einen Generator für zufällige Korrelationsmatrizen bei gegebenen Eigenwerten bereit.
scipy.linalg Verbesserungen#
scipy.linalg.svd erhielt ein neues Schlüsselwortargument, lapack_driver. Verfügbare Treiber sind gesdd (Standard) und gesvd.
scipy.linalg.lapack.ilaver gibt die Version der LAPACK-Bibliothek zurück, mit der SciPy verknüpft ist.
scipy.spatial Verbesserungen#
Boolesche Distanzen, scipy.spatial.pdist, wurden beschleunigt. Die Verbesserungen variieren je nach Funktion und Eingabegröße. In vielen Fällen kann man eine Beschleunigung von x2–x10 erwarten.
Die neue Klasse scipy.spatial.SphericalVoronoi konstruiert Voronoi-Diagramme auf der Oberfläche einer Sphäre. Details siehe Pull-Request gh-5232.
scipy.cluster Verbesserungen#
Ein neuer Clustering-Algorithmus, der Nearest-Neighbor-Chain-Algorithmus, wurde für scipy.cluster.hierarchy.linkage implementiert. Infolgedessen kann man eine signifikante algorithmische Verbesserung (\(O(N^2)\) statt \(O(N^3)\)) für mehrere Linkage-Methoden erwarten.
scipy.special Verbesserungen#
Die neue Funktion scipy.special.loggamma berechnet den Hauptzweig des Logarithmus der Gammafunktion. Für reelle Eingaben ist loggamma mit scipy.special.gammaln kompatibel. Für komplexe Eingaben hat sie ein konsistenteres Verhalten in der komplexen Ebene und sollte gammaln vorgezogen werden.
Vektorisierte Formen von sphärischen Bessel-Funktionen wurden als scipy.special.spherical_jn, scipy.special.spherical_kn, scipy.special.spherical_in und scipy.special.spherical_yn implementiert. Sie werden für die Verwendung gegenüber den nun veralteten sph_*-Funktionen empfohlen.
Mehrere spezielle Funktionen wurden auf den komplexen Bereich erweitert und/oder haben Verbesserungen im Bereich/Stabilität erfahren. Dazu gehören spence, digamma, log1p und einige andere.
Veraltete Funktionen#
Die klassenübergreifenden Eigenschaften von lti-Systemen wurden als veraltet markiert. Die folgenden Eigenschaften/Setter lösen eine DeprecationWarning aus
Name - (Zugriff/Setzen löst Warnung aus) - (Setzen löst Warnung aus) * StateSpace - (num, den, gain) - (zeros, poles) * TransferFunction (A, B, C, D, gain) - (zeros, poles) * ZerosPolesGain (A, B, C, D, num, den) - ()
Sphärische Bessel-Funktionen, sph_in, sph_jn, sph_kn, sph_yn, sph_jnyn und sph_inkn wurden zugunsten von scipy.special.spherical_jn und spherical_kn, spherical_yn, spherical_in als veraltet markiert.
Die folgenden Funktionen in scipy.constants sind veraltet: C2K, K2C, C2F, F2C, F2K und K2F. Sie werden durch eine neue Funktion scipy.constants.convert_temperature ersetzt, die alle diese Umrechnungen sowie Umrechnungen zur/von der Rankine-Temperaturskala durchführen kann.
Abwärtsinkompatible Änderungen#
scipy.optimize#
Das Konvergenzkriterium für optimize.bisect, optimize.brentq, optimize.brenth und optimize.ridder funktioniert nun genauso wie numpy.allclose.
scipy.ndimage#
Der Offset in ndimage.interpolation.affine_transform wird nun konsistent nach der Anwendung der Matrix hinzugefügt, unabhängig davon, ob die Matrix mit einem eindimensionalen oder zweidimensionalen Array spezifiziert wurde.
scipy.stats#
stats.ks_2samp gab früher unsinnige Werte zurück, wenn die Eingabe nicht reell war oder NaNs enthielt. Für solche Eingaben wird nun eine Ausnahme ausgelöst.
Mehrere veraltete Methoden von scipy.stats-Verteilungen wurden entfernt: est_loc_scale, vecfunc, veccdf und vec_generic_moment.
Veraltete Funktionen nanmean, nanstd und nanmedian wurden aus scipy.stats entfernt. Diese Funktionen wurden in SciPy 0.15.0 zugunsten ihrer numpy-Äquivalente als veraltet markiert.
Ein Fehler in der rvs()-Methode der Verteilungen in scipy.stats wurde behoben. Wenn Argumente an rvs() übergeben wurden, die für Broadcasting geformt waren, waren in vielen Fällen die zurückgegebenen Zufallsstichproben nicht zufällig. Ein einfaches Beispiel für das Problem ist stats.norm.rvs(loc=np.zeros(10)). Aufgrund des Fehlers würde dieser Aufruf 10 identische Werte zurückgeben. Der Fehler betraf nur Code, der auf dem Broadcasting der Form-, Positions- und Skalenparameter beruhte.
Die rvs()-Methode akzeptierte auch einige Argumente, die sie nicht hätte akzeptieren sollen. Es besteht eine potenzielle Rückwärtskompatibilitätsgefahr in Fällen, in denen rvs() Argumente akzeptierte, die nicht mit Broadcasting kompatibel sind. Ein Beispiel ist
stats.gamma.rvs([2, 5, 10, 15], size=(2,2))
Die Form des ersten Arguments ist nicht mit der angeforderten Größe kompatibel, aber die Funktion gab trotzdem ein Array mit der Form (2, 2) zurück. In SciPy 0.18 löst dieser Aufruf einen ValueError aus.
scipy.io#
scipy.io.netcdf Maskierung gibt nun dem Attribut _FillValue Vorrang vor dem Attribut missing_value, falls beide gegeben sind. Außerdem werden Daten nur dann als fehlend behandelt, wenn sie exakt mit einem dieser Attribute übereinstimmen: Werte, die sich durch Rundungsfehler von _FillValue oder missing_value unterscheiden, werden nicht mehr als fehlende Werte behandelt.
scipy.interpolate#
Die Klasse scipy.interpolate.PiecewisePolynomial wurde entfernt. Sie wurde in SciPy 0.14.0 als veraltet markiert, und scipy.interpolate.BPoly.from_derivatives dient als Drop-in-Ersatz.
Weitere Änderungen#
SciPy verwendet nun setuptools für seine Builds anstelle von einfachem distutils. Dies behebt die Verwendung von install_requires='scipy' in den setup.py-Dateien von Projekten, die von SciPy abhängen (siehe NumPy-Issue gh-6551 für Details). Dies kann sich potenziell auf die Funktionsweise von Build-/Installationsmethoden für SciPy selbst auswirken. Bitte melden Sie unerwartetes Verhalten auf dem SciPy-Issue-Tracker.
PR #6240 ändert die Interpretation der Option maxfun in den scipy.optimize-Modulroutinen L-BFGS-B. Eine L-BFGS-B-Suche besteht aus mehreren Iterationen, wobei jede Iteration aus einer oder mehreren Funktionsauswertungen besteht. Während die alte Suchstrategie sofort beim Erreichen von maxfun Funktionsauswertungen abbrach, erlaubt die neue Strategie der aktuellen Iteration, trotz Erreichen von maxfun, fertiggestellt zu werden.
Die gebündelte Kopie von Qhull im Unterpaket scipy.spatial wurde auf Version 2015.2 aktualisiert.
Die gebündelte Kopie von ARPACK im Unterpaket scipy.sparse.linalg wurde auf arpack-ng 3.3.0 aktualisiert.
Die gebündelte Kopie von SuperLU im Unterpaket scipy.sparse wurde auf Version 5.1.1 aktualisiert.