SciPy 0.17.0 Release Notes#
SciPy 0.17.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. Moreover, our development attention will now shift to bug-fix releases on the 0.17.x branch, and on adding new features on the master branch.
This release requires Python 2.6, 2.7 or 3.2-3.5 and NumPy 1.6.2 or greater.
Release highlights:
New functions for linear and nonlinear least squares optimization with constraints:
scipy.optimize.lsq_linear
andscipy.optimize.least_squares
Support for fitting with bounds in
scipy.optimize.curve_fit
.Significant improvements to
scipy.stats
, providing many functions with better handing of inputs which have NaNs or are empty, improved documentation, and consistent behavior betweenscipy.stats
andscipy.stats.mstats
.Significant performance improvements and new functionality in
scipy.spatial.cKDTree
.
New features#
scipy.cluster
improvements#
A new function scipy.cluster.hierarchy.cut_tree
, which determines a cut tree
from a linkage matrix, was added.
scipy.io
improvements#
scipy.io.mmwrite
gained support for symmetric sparse matrices.
scipy.io.netcdf
gained support for masking and scaling data based on data
attributes.
scipy.optimize
improvements#
Linear assignment problem solver#
scipy.optimize.linear_sum_assignment
is a new function for solving the
linear sum assignment problem. It uses the Hungarian algorithm (Kuhn-Munkres).
Least squares optimization#
A new function for nonlinear least squares optimization with constraints was
added: scipy.optimize.least_squares
. It provides several methods:
Levenberg-Marquardt for unconstrained problems, and two trust-region methods
for constrained ones. Furthermore it provides different loss functions.
New trust-region methods also handle sparse Jacobians.
A new function for linear least squares optimization with constraints was
added: scipy.optimize.lsq_linear
. It provides a trust-region method as well
as an implementation of the Bounded-Variable Least-Squares (BVLS) algorithm.
scipy.optimize.curve_fit
now supports fitting with bounds.
scipy.signal
improvements#
A mode
keyword was added to scipy.signal.spectrogram
, to let it return
other spectrograms than power spectral density.
scipy.stats
improvements#
Many functions in scipy.stats
have gained a nan_policy
keyword, which
allows specifying how to treat input with NaNs in them: propagate the NaNs,
raise an error, or omit the NaNs.
Many functions in scipy.stats
have been improved to correctly handle input
arrays that are empty or contain infs/nans.
A number of functions with the same name in scipy.stats
and
scipy.stats.mstats
were changed to have matching signature and behavior.
See gh-5474 for details.
scipy.stats.binom_test
and scipy.stats.mannwhitneyu
gained a keyword
alternative
, which allows specifying the hypothesis to test for.
Eventually all hypothesis testing functions will get this keyword.
For methods of many continuous distributions, complex input is now accepted.
Matrix normal distribution has been implemented as scipy.stats.matrix_normal
.
scipy.sparse
improvements#
The axis keyword was added to sparse norms, scipy.sparse.linalg.norm
.
scipy.spatial
improvements#
scipy.spatial.cKDTree
was partly rewritten for improved performance and
several new features were added to it:
the
query_ball_point
method became significantly fasterquery
andquery_ball_point
gained ann_jobs
keyword for parallel executionbuild and query methods now release the GIL
full pickling support
support for periodic spaces
the
sparse_distance_matrix
method can now return and sparse matrix type
scipy.interpolate
improvements#
Out-of-bounds behavior of scipy.interpolate.interp1d
has been improved.
Use a two-element tuple for the fill_value
argument to specify separate
fill values for input below and above the interpolation range.
Linear and nearest interpolation kinds of scipy.interpolate.interp1d
support
extrapolation via the fill_value="extrapolate"
keyword.
fill_value
can also be set to an array-like (or a two-element tuple of
array-likes for separate below and above values) so long as it broadcasts
properly to the non-interpolated dimensions of an array. This was implicitly
supported by previous versions of scipy, but support has now been formalized
and gets compatibility-checked before use. For example, a set of y
values
to interpolate with shape (2, 3, 5)
interpolated along the last axis (2)
could accept a fill_value
array with shape ()
(singleton), (1,)
,
(2, 1)
, (1, 3)
, (3,)
, or (2, 3)
; or it can be a 2-element tuple
to specify separate below and above bounds, where each of the two tuple
elements obeys proper broadcasting rules.
scipy.linalg
improvements#
The default algorithm for scipy.linalg.leastsq has been changed to use
LAPACK’s function *gelsd
. Users wanting to get the previous behavior
can use a new keyword lapack_driver="gelss"
(allowed values are
“gelss”, “gelsd” and “gelsy”).
scipy.sparse
matrices and linear operators now support the matmul (@
)
operator when available (Python 3.5+). See
[PEP 465](https://legacy.python.org/dev/peps/pep-0465/)
A new function scipy.linalg.ordqz
, for QZ decomposition with reordering, has
been added.
Deprecated features#
scipy.stats.histogram
is deprecated in favor of np.histogram
, which is
faster and provides the same functionality.
scipy.stats.threshold
and scipy.mstats.threshold
are deprecated
in favor of np.clip
. See issue #617 for details.
scipy.stats.ss
is deprecated. This is a support function, not meant to
be exposed to the user. Also, the name is unclear. See issue #663 for details.
scipy.stats.square_of_sums
is deprecated. This too is a support function
not meant to be exposed to the user. See issues #665 and #663 for details.
scipy.stats.f_value
, scipy.stats.f_value_multivariate
,
scipy.stats.f_value_wilks_lambda
, and scipy.mstats.f_value_wilks_lambda
are deprecated. These are related to ANOVA, for which scipy.stats
provides
quite limited functionality and these functions are not very useful standalone.
See issues #660 and #650 for details.
scipy.stats.chisqprob
is deprecated. This is an alias. stats.chi2.sf
should be used instead.
scipy.stats.betai
is deprecated. This is an alias for special.betainc
which should be used instead.
Backwards incompatible changes#
The functions stats.trim1
and stats.trimboth
now make sure the
elements trimmed are the lowest and/or highest, depending on the case.
Slicing without at least partial sorting was previously done, but didn’t
make sense for unsorted input.
When variable_names
is set to an empty list, scipy.io.loadmat
now
correctly returns no values instead of all the contents of the MAT file.
Element-wise multiplication of sparse matrices now returns a sparse result in all cases. Previously, multiplying a sparse matrix with a dense matrix or array would return a dense matrix.
The function misc.lena
has been removed due to license incompatibility.
The constructor for sparse.coo_matrix
no longer accepts (None, (m,n))
to construct an all-zero matrix of shape (m,n)
. This functionality was
deprecated since at least 2007 and was already broken in the previous SciPy
release. Use coo_matrix((m,n))
instead.
The Cython wrappers in linalg.cython_lapack
for the LAPACK routines
*gegs
, *gegv
, *gelsx
, *geqpf
, *ggsvd
, *ggsvp
,
*lahrd
, *latzm
, *tzrqf
have been removed since these routines
are not present in the new LAPACK 3.6.0 release. With the exception of
the routines *ggsvd
and *ggsvp
, these were all deprecated in favor
of routines that are currently present in our Cython LAPACK wrappers.
Because the LAPACK *gegv
routines were removed in LAPACK 3.6.0. The
corresponding Python wrappers in scipy.linalg.lapack
are now
deprecated and will be removed in a future release. The source files for
these routines have been temporarily included as a part of scipy.linalg
so that SciPy can be built against LAPACK versions that do not provide
these deprecated routines.
Other changes#
Html and pdf documentation of development versions of Scipy is now automatically rebuilt after every merged pull request.
scipy.constants
is updated to the CODATA 2014 recommended values.
Usage of scipy.fftpack
functions within Scipy has been changed in such a
way that PyFFTW can easily replace
scipy.fftpack
functions (with improved performance). See
gh-5295 for details.
The imread
functions in scipy.misc
and scipy.ndimage
were unified, for
which a mode
argument was added to scipy.misc.imread. Also, bugs for
1-bit and indexed RGB image formats were fixed.
runtests.py
, the development script to build and test Scipy, now allows
building in parallel with --parallel
.