SciPy 0.19.0 Release Notes#
SciPy 0.19.0 ist der Höhepunkt von 7 Monaten harter Arbeit. Es enthält viele neue Funktionen, zahlreiche Fehlerbehebungen, verbesserte Testabdeckung und eine bessere Dokumentation. Es gab eine Reihe von Deprecations 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.19.x-Zweig und auf das Hinzufügen neuer Funktionen für den Master-Zweig verlagern.
Diese Version erfordert Python 2.7 oder 3.4-3.6 und NumPy 1.8.2 oder neuer.
Highlights dieser Version sind
Eine einheitliche Foreign Function Interface-Schicht,
scipy.LowLevelCallable.Cython API für skalare, typisierte Versionen der universellen Funktionen aus dem
scipy.special-Modul, über cimport scipy.special.cython_special.
Neue Funktionen#
Verbesserungen an der Foreign Function Interface#
scipy.LowLevelCallable bietet eine neue einheitliche Schnittstelle zum Einbinden von Low-Level-kompilierten Callback-Funktionen im Python-Bereich. Es unterstützt Cython importierte "API"-Funktionen, ctypes-Funktionszeiger, CFFI-Funktionszeiger, PyCapsules, Numba-jitted Funktionen und mehr. Einzelheiten finden Sie unter gh-6509.
scipy.linalg Verbesserungen#
Die Funktion scipy.linalg.solve erhielt zwei weitere Schlüsselwörter: assume_a und transposed. Die zugrunde liegenden LAPACK-Routinen werden durch "Experten"-Versionen ersetzt und können nun auch zur Lösung von symmetrischen, hermiteschen und positiv definiten Koeffizientenmatrizen verwendet werden. Darüber hinaus verursachen schlecht konditionierte Matrizen nun eine Warnung mit Informationen über die geschätzte Konditionszahl. Das alte Schlüsselwort sym_pos bleibt aus Gründen der Abwärtskompatibilität erhalten, ist aber identisch mit assume_a='pos'. Außerdem ist das Schlüsselwort debug, das keine Funktion hatte und nur die overwrite_<a, b> Werte ausgab, veraltet.
Die Funktion scipy.linalg.matrix_balance wurde hinzugefügt, um das sogenannte Matrix-Balancing mittels der LAPACK xGEBAL-Routinenfamilie durchzuführen. Dies kann verwendet werden, um die Zeilen- und Spaltnormen durch diagonale Ähnlichkeitstransformationen annähernd anzugleichen.
Die Funktionen scipy.linalg.solve_continuous_are und scipy.linalg.solve_discrete_are verfügen über numerisch stabilere Algorithmen. Diese Funktionen können auch verallgemeinerte algebraische Matrix-Riccati-Gleichungen lösen. Darüber hinaus erhielten beide ein Schlüsselwort balanced, um das Balancing ein- und auszuschalten.
scipy.spatial Verbesserungen#
scipy.spatial.SphericalVoronoi.sort_vertices_of_regions wurde in Cython neu geschrieben, um die Leistung zu verbessern.
scipy.spatial.SphericalVoronoi kann > 200.000 Punkte (mindestens 10 Millionen) verarbeiten und hat eine verbesserte Leistung.
Die Funktion scipy.spatial.distance.directed_hausdorff wurde hinzugefügt, um den gerichteten Hausdorff-Abstand zu berechnen.
Die Methode count_neighbors von scipy.spatial.cKDTree kann nun gewichtete Paar-Zählungen über die neuen Schlüsselwörter weights und cumulative durchführen. Einzelheiten finden Sie unter gh-5647.
scipy.spatial.distance.pdist und scipy.spatial.distance.cdist unterstützen nun benutzerdefinierte Metriken, die keine Doubles sind.
scipy.ndimage Verbesserungen#
Die C API der Callback-Funktion unterstützt PyCapsules in Python 2.7.
Mehrdimensionale Filter erlauben nun unterschiedliche Extrapolationsmodi für verschiedene Achsen.
scipy.optimize Verbesserungen#
Der globale Minimierer scipy.optimize.basinhopping erhielt ein neues Schlüsselwort, seed, mit dem der Zufallszahlengenerator initialisiert und wiederholbare Minimierungen erzielt werden können.
Das Schlüsselwort sigma in scipy.optimize.curve_fit wurde überladen, um auch die Kovarianzmatrix der Fehler in den Daten zu akzeptieren.
scipy.signal Verbesserungen#
Die Funktionen scipy.signal.correlate und scipy.signal.convolve verfügen über einen neuen optionalen Parameter method. Der Standardwert auto schätzt die schnellste der beiden Berechnungsmethoden ab: den direkten Ansatz und den Fourier-Transformations-Ansatz.
Eine neue Funktion wurde hinzugefügt, um die Methode zur Faltung/Korrelation auszuwählen: scipy.signal.choose_conv_method, die sich eignet, wenn Faltungen oder Korrelationen auf vielen Arrays gleicher Größe durchgeführt werden.
Neue Funktionen wurden hinzugefügt, um komplexe kurzzeitige Fourier-Transformationen eines Eingangssignals zu berechnen und die Transformation zu invertieren, um das ursprüngliche Signal wiederherzustellen: scipy.signal.stft und scipy.signal.istft. Diese Implementierung behebt auch die zuvor falsche Ausgabe von scipy.signal.spectrogram, wenn komplexe Ausgabedaten angefordert wurden.
Die Funktion scipy.signal.sosfreqz wurde hinzugefügt, um die Frequenzantwort aus Zweikammer-Sektionen (second-order sections) zu berechnen.
Die Funktion scipy.signal.unit_impulse wurde hinzugefügt, um bequem eine Impulsfunktion zu generieren.
Die Funktion scipy.signal.iirnotch wurde hinzugefügt, um Zweikammer-IIR-Notch-Filter zu entwerfen, die verwendet werden können, um eine Frequenzkomponente aus einem Signal zu entfernen. Die duale Funktion scipy.signal.iirpeak wurde hinzugefügt, um die Koeffizienten eines Zweikammer-IIR-Peak- (resonanten) Filters zu berechnen.
Die Funktion scipy.signal.minimum_phase wurde hinzugefügt, um FIR-Filter mit linearer Phase in Minimalphasen-Filter umzuwandeln.
Die Funktionen scipy.signal.upfirdn und scipy.signal.resample_poly sind nun deutlich schneller, wenn sie auf n-dimensionalen Arrays mit n > 1 arbeiten. Die größte Reduzierung der Rechenzeit wird in Fällen erzielt, in denen die Größe des Arrays entlang der zu filternden Achse klein ist (ca. < 1k Samples).
scipy.fftpack Verbesserungen#
Fast-Fourier-Transformations-Routinen akzeptieren nun np.float16-Eingaben und wandeln sie in np.float32 um. Zuvor wurde ein Fehler ausgelöst.
scipy.cluster Verbesserungen#
Die Methoden "centroid" und "median" von scipy.cluster.hierarchy.linkage wurden erheblich beschleunigt. Langjährige Probleme bei der Verwendung von linkage auf großen Eingabedaten (über 16 GB) wurden behoben.
scipy.sparse Verbesserungen#
Die Funktionen scipy.sparse.save_npz und scipy.sparse.load_npz wurden hinzugefügt, die eine einfache Serialisierung für einige Sparse-Formate bieten.
Die Methode prune der Klassen bsr_matrix, csc_matrix und csr_matrix wurde aktualisiert, um unter bestimmten Bedingungen zugrunde liegende Arrays neu zuzuweisen und so den Speicherverbrauch zu reduzieren.
Die Methoden argmin und argmax wurden zu den Klassen coo_matrix, csc_matrix, csr_matrix und bsr_matrix hinzugefügt.
Neue Funktion scipy.sparse.csgraph.structural_rank berechnet den strukturellen Rang eines Graphen mit einem gegebenen Sparsity-Muster.
Neue Funktion scipy.sparse.linalg.spsolve_triangular löst ein dünnbesetztes lineares System mit einer dünnbesetzten linken Matrix.
scipy.special Verbesserungen#
Skalare, typisierte Versionen der universellen Funktionen aus scipy.special sind im Cython-Bereich über cimport aus dem neuen Modul scipy.special.cython_special verfügbar. Diese skalaren Funktionen sind für skalare Argumente voraussichtlich deutlich schneller als die universellen Funktionen. Einzelheiten finden Sie im scipy.special-Tutorial.
Bessere Kontrolle über Fehler von Spezialfunktionen wird durch die Funktionen scipy.special.geterr und scipy.special.seterr sowie den Kontextmanager scipy.special.errstate geboten.
Die Namen von Wurzelfunktionen für orthogonale Polynome wurden geändert, um sie mit anderen Funktionen, die sich auf orthogonale Polynome beziehen, konsistent zu machen. Zum Beispiel wurde scipy.special.j_roots in scipy.special.roots_jacobi umbenannt, um die Konsistenz mit den verwandten Funktionen scipy.special.jacobi und scipy.special.eval_jacobi zu gewährleisten. Zur Wahrung der Abwärtskompatibilität wurden die alten Namen als Aliase beibehalten.
Die Wright Omega-Funktion wird als scipy.special.wrightomega implementiert.
scipy.stats Verbesserungen#
Die Funktion scipy.stats.weightedtau wurde hinzugefügt. Sie bietet eine gewichtete Version von Kendalls Tau.
Neue Klasse scipy.stats.multinomial implementiert die multinomiale Verteilung.
Neue Klasse scipy.stats.rv_histogram konstruiert eine stetige univariate Verteilung mit einer stückweise linearen CDF aus einer binned Datenstichprobe.
Neue Klasse scipy.stats.argus implementiert die Argus-Verteilung.
scipy.interpolate Verbesserungen#
Neue Klasse scipy.interpolate.BSpline repräsentiert Splines. BSpline-Objekte enthalten Knoten und Koeffizienten und können den Spline auswerten. Das Format ist konsistent mit FITPACK, so dass man zum Beispiel machen kann
>>> t, c, k = splrep(x, y, s=0)
>>> spl = BSpline(t, c, k)
>>> np.allclose(spl(x), y)
spl*-Funktionen, scipy.interpolate.splev, scipy.interpolate.splint, scipy.interpolate.splder und scipy.interpolate.splantider akzeptieren sowohl BSpline-Objekte als auch (t, c, k)-Tupel zur Abwärtskompatibilität.
Für mehrdimensionale Splines, c.ndim > 1, sind BSpline-Objekte konsistent mit stückweise definierten Polynomen, scipy.interpolate.PPoly. Das bedeutet, dass BSpline-Objekte nicht sofort mit scipy.interpolate.splprep konsistent sind und man *nicht* machen kann >>> BSpline(*splprep([x, y])[0]). Konsultieren Sie die Testsuite von scipy.interpolate für Beispiele zur genauen Äquivalenz.
In neuem Code ist es vorzuziehen, scipy.interpolate.BSpline-Objekte zu verwenden, anstatt (t, c, k)-Tupel direkt zu manipulieren.
Neue Funktion scipy.interpolate.make_interp_spline konstruiert einen interpolierenden Spline gegeben Datenpunkte und Randbedingungen.
Neue Funktion scipy.interpolate.make_lsq_spline konstruiert eine Least-Squares-Spline-Approximation gegeben Datenpunkte.
scipy.integrate Verbesserungen#
Nun unterstützt scipy.integrate.fixed_quad vektorwertige Funktionen.
Veraltete Funktionen#
scipy.interpolate.splmake, scipy.interpolate.spleval und scipy.interpolate.spline sind veraltet. Das von splmake/spleval verwendete Format war inkonsistent mit splrep/splev, was für Benutzer verwirrend war.
scipy.special.errprint ist veraltet. Verbesserte Funktionalität ist verfügbar in scipy.special.seterr.
Das Aufrufen von scipy.spatial.distance.pdist oder scipy.spatial.distance.cdist mit Argumenten, die von der gewählten Metrik nicht benötigt werden, ist veraltet. Außerdem sind die Metriken "old_cosine" und "old_cos" veraltet.
Abwärtsinkompatible Änderungen#
Das veraltete Untermodul scipy.weave wurde entfernt.
scipy.spatial.distance.squareform gibt nun Arrays mit dem gleichen Dtype wie die Eingabe zurück, anstatt immer float64 zu sein.
scipy.special.errprint gibt nun eine Boolesche zurück.
Die Funktion scipy.signal.find_peaks_cwt gibt nun ein Array anstelle einer Liste zurück.
scipy.stats.kendalltau berechnet nun den korrekten p-Wert, falls die Eingabe Bindungen enthält. Der p-Wert ist auch identisch mit dem von scipy.stats.mstats.kendalltau und R berechneten. Falls die Eingabe keine Bindungen enthält, gibt es keine Änderung gegenüber der vorherigen Implementierung.
scipy.linalg.block_diag ignoriert keine nullgroßen Matrizen mehr. Stattdessen werden Zeilen oder Spalten von Nullen der entsprechenden Größe eingefügt. Siehe gh-4908 für weitere Details.
Weitere Änderungen#
SciPy-Wheels melden nun ihre Abhängigkeit von numpy auf allen Plattformen. Diese Änderung wurde vorgenommen, da Numpy-Wheels verfügbar sind und da sich das Upgrade-Verhalten von pip endlich zum Besseren ändert (verwenden Sie --upgrade-strategy=only-if-needed für pip >= 8.2; dieses Verhalten wird in der nächsten Hauptversion von pip zum Standard).
Numerische Werte, die von scipy.interpolate.interp1d mit kind="cubic" und "quadratic" zurückgegeben werden, können sich im Vergleich zu früheren SciPy-Versionen ändern. Wenn Ihr Code von spezifischen numerischen Werten (d.h. von Implementierungsdetails der Interpolatoren) abhing, möchten Sie vielleicht Ihre Ergebnisse überprüfen.