SciPy 1.6.0
SciPy 1.6.0 Release Notes
SciPy 1.6.0
is the culmination of 6 months of hard work. It contains
many new features, numerous bug-fixes, improved test coverage and better
documentation. There have been a number of deprecations and API changes
in this release, which are documented below. All users are encouraged to
upgrade to this release, as there are a large number of bug-fixes and
optimizations. Before upgrading, we recommend that users check that
their own code does not use deprecated SciPy functionality (to do so,
run your code with python -Wd
and check for DeprecationWarning
s).
Our development attention will now shift to bug-fix releases on the
1.6.x
branch, and on adding new features on the master branch.
This release requires Python 3.7+
and NumPy 1.16.5
or greater.
For running on PyPy, PyPy3 6.0+
is required.
Highlights of this release
scipy.ndimage
improvements: Fixes and ehancements to boundary extension
modes for interpolation functions. Support for complex-valued inputs in many
filtering and interpolation functions. Newgrid_mode
option for
scipy.ndimage.zoom
to enable results consistent with scikit-image's
rescale
.scipy.optimize.linprog
has fast, new methods for large, sparse problems
from theHiGHS
library.scipy.stats
improvements including new distributions, a new test, and
enhancements to existing distributions and tests
New features
scipy.special
improvements
scipy.special
now has improved support for 64-bit LAPACK
backend
scipy.odr
improvements
scipy.odr
now has support for 64-bit integer BLAS
scipy.odr.ODR
has gained an optional overwrite
argument so that existing
files may be overwritten.
scipy.integrate
improvements
Some renames of functions with poor names were done, with the old names
retained without being in the reference guide for backwards compatibility
reasons:
integrate.simps
was renamed tointegrate.simpson
integrate.trapz
was renamed tointegrate.trapezoid
integrate.cumtrapz
was renamed tointegrate.cumulative_trapezoid
scipy.cluster
improvements
scipy.cluster.hierarchy.DisjointSet
has been added for incremental
connectivity queries.
scipy.cluster.hierarchy.dendrogram
return value now also includes leaf color
information in leaves_color_list
.
scipy.interpolate
improvements
scipy.interpolate.interp1d
has a new method nearest-up
, similar to the
existing method nearest
but rounds half-integers up instead of down.
scipy.io
improvements
Support has been added for reading arbitrary bit depth integer PCM WAV files
from 1- to 32-bit, including the commonly-requested 24-bit depth.
scipy.linalg
improvements
The new function scipy.linalg.matmul_toeplitz
uses the FFT to compute the
product of a Toeplitz matrix with another matrix.
scipy.linalg.sqrtm
and scipy.linalg.logm
have performance improvements
thanks to additional Cython code.
Python LAPACK
wrappers have been added for pptrf
, pptrs
, ppsv
,
pptri
, and ppcon
.
scipy.linalg.norm
and the svd
family of functions will now use 64-bit
integer backends when available.
scipy.ndimage
improvements
scipy.ndimage.convolve
, scipy.ndimage.correlate
and their 1d counterparts
now accept both complex-valued images and/or complex-valued filter kernels. All
convolution-based filters also now accept complex-valued inputs
(e.g. gaussian_filter
, uniform_filter
, etc.).
Multiple fixes and enhancements to boundary handling were introduced to
scipy.ndimage
interpolation functions (i.e. affine_transform
,
geometric_transform
, map_coordinates
, rotate
, shift
, zoom
).
A new boundary mode, grid-wrap
was added which wraps images periodically,
using a period equal to the shape of the input image grid. This is in contrast
to the existing wrap
mode which uses a period that is one sample smaller
than the original signal extent along each dimension.
A long-standing bug in the reflect
boundary condition has been fixed and
the mode grid-mirror
was introduced as a synonym for reflect
.
A new boundary mode, grid-constant
is now available. This is similar to
the existing ndimage constant
mode, but interpolation will still performed
at coordinate values outside of the original image extent. This
grid-constant
mode is consistent with OpenCV's BORDER_CONSTANT
mode
and scikit-image's constant
mode.
Spline pre-filtering (used internally by ndimage
interpolation functions
when order >= 2
), now supports all boundary modes rather than always
defaulting to mirror boundary conditions. The standalone functions
spline_filter
and spline_filter1d
have analytical boundary conditions
that match modes mirror
, grid-wrap
and reflect
.
scipy.ndimage
interpolation functions now accept complex-valued inputs. In
this case, the interpolation is applied independently to the real and
imaginary components.
The ndimage
tutorials
(https://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html) have been
updated with new figures to better clarify the exact behavior of all of the
interpolation boundary modes.
scipy.ndimage.zoom
now has a grid_mode
option that changes the coordinate
of the center of the first pixel along an axis from 0 to 0.5. This allows
resizing in a manner that is consistent with the behavior of scikit-image's
resize
and rescale
functions (and OpenCV's cv2.resize
).
scipy.optimize
improvements
scipy.optimize.linprog
has fast, new methods for large, sparse problems from
the HiGHS
C++ library. method='highs-ds'
uses a high performance dual
revised simplex implementation (HSOL), method='highs-ipm'
uses an
interior-point method with crossover, and method='highs'
chooses between
the two automatically. These methods are typically much faster and often exceed
the accuracy of other linprog
methods, so we recommend explicitly
specifying one of these three method values when using linprog
.
scipy.optimize.quadratic_assignment
has been added for approximate solution
of the quadratic assignment problem.
scipy.optimize.linear_sum_assignment
now has a substantially reduced overhead
for small cost matrix sizes
scipy.optimize.least_squares
has improved performance when the user provides
the jacobian as a sparse jacobian already in csr_matrix
format
scipy.optimize.linprog
now has an rr_method
argument for specification
of the method used for redundancy handling, and a new method for this purpose
is available based on the interpolative decomposition approach.
scipy.signal
improvements
scipy.signal.gammatone
has been added to design FIR or IIR filters that
model the human auditory system.
scipy.signal.iircomb
has been added to design IIR peaking/notching comb
filters that can boost/attenuate a frequency from a signal.
scipy.signal.sosfilt
performance has been improved to avoid some previously-
observed slowdowns
scipy.signal.windows.taylor
has been added--the Taylor window function is
commonly used in radar digital signal processing
scipy.signal.gauss_spline
now supports list
type input for consistency
with other related SciPy functions
scipy.signal.correlation_lags
has been added to allow calculation of the lag/
displacement indices array for 1D cross-correlation.
scipy.sparse
improvements
A solver for the minimum weight full matching problem for bipartite graphs,
also known as the linear assignment problem, has been added in
scipy.sparse.csgraph.min_weight_full_bipartite_matching
. In particular, this
provides functionality analogous to that of
scipy.optimize.linear_sum_assignment
, but with improved performance for sparse
inputs, and the ability to handle inputs whose dense representations would not
fit in memory.
The time complexity of scipy.sparse.block_diag
has been improved dramatically
from quadratic to linear.
scipy.sparse.linalg
improvements
The vendored version of SuperLU
has been updated
scipy.fft
improvements
The vendored pocketfft
library now supports compiling with ARM neon vector
extensions and has improved thread pool behavior.
scipy.spatial
improvements
The python implementation of KDTree
has been dropped and KDTree
is now
implemented in terms of cKDTree
. You can now expect cKDTree
-like
performance by default. This also means sys.setrecursionlimit
no longer
needs to be increased for querying large trees.
transform.Rotation
has been updated with support for Modified Rodrigues
Parameters alongside the existing rotation representations (PR gh-12667).
scipy.spatial.transform.Rotation
has been partially cythonized, with some
performance improvements observed
scipy.spatial.distance.cdist
has improved performance with the minkowski
metric, especially for p-norm values of 1 or 2.
scipy.stats
improvements
New distributions have been added to scipy.stats
:
- The asymmetric Laplace continuous distribution has been added as
scipy.stats.laplace_asymmetric
. - The negative hypergeometric distribution has been added as
scipy.stats.nhypergeom
. - The multivariate t distribution has been added as
scipy.stats.multivariate_t
. - The multivariate hypergeometric distribution has been added as
scipy.stats.multivariate_hypergeom
.
The fit
method has been overridden for several distributions (laplace
,
pareto
, rayleigh
, invgauss
, logistic
, gumbel_l
,
gumbel_r
); they now use analytical, distribution-specific maximum
likelihood estimation results for greater speed and accuracy than the generic
(numerical optimization) implementation.
The one-sample Cramér-von Mises test has been added as
scipy.stats.cramervonmises
.
An option to compute one-sided p-values was added to scipy.stats.ttest_1samp
,
scipy.stats.ttest_ind_from_stats
, scipy.stats.ttest_ind
and
scipy.stats.ttest_rel
.
The function scipy.stats.kendalltau
now has an option to compute Kendall's
tau-c (also known as Stuart's tau-c), and support has been added for exact
p-value calculations for sample sizes > 171
.
stats.trapz
was renamed to stats.trapezoid
, with the former name retained
as an alias for backwards compatibility reasons.
The function scipy.stats.linregress
now includes the standard error of the
intercept in its return value.
The _logpdf
, _sf
, and _isf
methods have been added to
scipy.stats.nakagami
; _sf
and _isf
methods also added to
scipy.stats.gumbel_r
The sf
method has been added to scipy.stats.levy
and scipy.stats.levy_l
for improved precision.
scipy.stats.binned_statistic_dd
performance improvements for the following
computed statistics: max
, min
, median
, and std
.
We gratefully acknowledge the Chan-Zuckerberg Initiative Essential Open Source
Software for Science program for supporting many of these improvements to
scipy.stats
.
Deprecated features
scipy.spatial
changes
Calling KDTree.query
with k=None
to find all neighbours is deprecated.
Use KDTree.query_ball_point
instead.
distance.wminkowski
was deprecated; use distance.minkowski
and supply
weights with the w
keyword instead.
Backwards incompatible changes
scipy
changes
Using scipy.fft
as a function aliasing numpy.fft.fft
was removed after
being deprecated in SciPy 1.4.0
. As a result, the scipy.fft
submodule
must be explicitly imported now, in line with other SciPy subpackages.
scipy.signal
changes
The output of decimate
, lfilter_zi
, lfiltic
, sos2tf
, and
sosfilt_zi
have been changed to match numpy.result_type
of their inputs.
The window function slepian
was removed. It had been deprecated since SciPy
1.1
.
scipy.spatial
changes
cKDTree.query
now returns 64-bit rather than 32-bit integers on Windows,
making behaviour consistent between platforms (PR gh-12673).
scipy.stats
changes
The frechet_l
and frechet_r
distributions were removed. They were
deprecated since SciPy 1.0
.
Other changes
setup_requires
was removed from setup.py
. This means that users
invoking python setup.py install
without having numpy already installed
will now get an error, rather than having numpy installed for them via
easy_install
. This install method was always fragile and problematic, users
are encouraged to use pip
when installing from source.
- Fixed a bug in
scipy.optimize.dual_annealing
accept_reject
calculation
that caused uphill jumps to be accepted less frequently. - The time required for (un)pickling of
scipy.stats.rv_continuous
,
scipy.stats.rv_discrete
, andscipy.stats.rv_frozen
has been significantly
reduced (gh12550). Inheriting subclasses should note that__setstate__
no
longer calls__init__
upon unpickling.
Authors
- @endolith
- @vkk800
- aditya +
- George Bateman +
- Christoph Baumgarten
- Peter Bell
- Tobias Biester +
- Keaton J. Burns +
- Evgeni Burovski
- Rüdiger Busche +
- Matthias Bussonnier
- Dominic C +
- Corallus Caninus +
- CJ Carey
- Thomas A Caswell
- chapochn +
- Lucía Cheung
- Zach Colbert +
- Coloquinte +
- Yannick Copin +
- Devin Crowley +
- Terry Davis +
- Michaël Defferrard +
- devonwp +
- Didier +
- divenex +
- Thomas Duvernay +
- Eoghan O'Connell +
- Gökçen Eraslan
- Kristian Eschenburg +
- Ralf Gommers
- Thomas Grainger +
- GreatV +
- Gregory Gundersen +
- h-vetinari +
- Matt Haberland
- Mark Harfouche +
- He He +
- Alex Henrie
- Chun-Ming Huang +
- Martin James McHugh III +
- Alex Izvorski +
- Joey +
- ST John +
- Jonas Jonker +
- Julius Bier Kirkegaard
- Marcin Konowalczyk +
- Konrad0
- Sam Van Kooten +
- Sergey Koposov +
- Peter Mahler Larsen
- Eric Larson
- Antony Lee
- Gregory R. Lee
- Loïc Estève
- Jean-Luc Margot +
- MarkusKoebis +
- Nikolay Mayorov
- G. D. McBain
- Andrew McCluskey +
- Nicholas McKibben
- Sturla Molden
- Denali Molitor +
- Eric Moore
- Shashaank N +
- Prashanth Nadukandi +
- nbelakovski +
- Andrew Nelson
- Nick +
- Nikola Forró +
- odidev
- ofirr +
- Sambit Panda
- Dima Pasechnik
- Tirth Patel +
- Matti Picus
- Paweł Redzyński +
- Vladimir Philipenko +
- Philipp Thölke +
- Ilhan Polat
- Eugene Prilepin +
- Vladyslav Rachek
- Ram Rachum +
- Tyler Reddy
- Martin Reinecke +
- Simon Segerblom Rex +
- Lucas Roberts
- Benjamin Rowell +
- Eli Rykoff +
- Atsushi Sakai
- Moritz Schulte +
- Daniel B. Smith
- Steve Smith +
- Jan Soedingrekso +
- Victor Stinner +
- Jose Storopoli +
- Diana Sukhoverkhova +
- Søren Fuglede Jørgensen
- taoky +
- Mike Taves +
- Ian Thomas +
- Will Tirone +
- Frank Torres +
- Seth Troisi
- Ronald van Elburg +
- Hugo van Kemenade
- Paul van Mulbregt
- Saul Ivan Rivas Vega +
- Pauli Virtanen
- Jan Vleeshouwers
- Samuel Wallan
- Warren Weckesser
- Ben West +
- Eric Wieser
- WillTirone +
- Levi John Wolf +
- Zhiqing Xiao
- Rory Yorke +
- Yun Wang (Maigo) +
- Egor Zemlyanoy +
- ZhihuiChen0903 +
- Jacob Zhong +
A total of 122 people contributed to this release.
People with a "+" by their names contributed a patch for the first time.
This list of names is automatically generated, and may not be fully complete.