SciPy 1.11.0 Release Notes
SciPy 1.11.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.11.x branch, and on adding new features on the main branch.
This release requires Python 3.9+
and NumPy 1.21.6
or greater.
For running on PyPy, PyPy3 6.0+
is required.
Highlights of this release
- Several
scipy.sparse
array API improvements, includingsparse.sparray
, a new
public base class distinct from the oldersparse.spmatrix
class,
proper 64-bit index support, and numerous deprecations paving the way to a
modern sparse array experience. scipy.stats
added tools for survival analysis, multiple hypothesis testing,
sensitivity analysis, and working with censored data.- A new function was added for quasi-Monte Carlo integration, and linear
algebra functionsdet
andlu
now accept nD-arrays. - An
axes
argument was added broadly tondimage
functions, facilitating
analysis of stacked image data.
New features
scipy.integrate
improvements
- Added
scipy.integrate.qmc_quad
for quasi-Monte Carlo integration. - For an even number of points,
scipy.integrate.simpson
now calculates
a parabolic segment over the last three points which gives improved
accuracy over the previous implementation.
scipy.cluster
improvements
disjoint_set
has a new methodsubset_size
for providing the size
of a particular subset.
scipy.constants
improvements
- The
quetta
,ronna
,ronto
, andquecto
SI prefixes were added.
scipy.linalg
improvements
scipy.linalg.det
is improved and now accepts nD-arrays.scipy.linalg.lu
is improved and now accepts nD-arrays. With the new
p_indices
switch the output permutation argument can be 1D(n,)
permutation index instead of the full(n, n)
array.
scipy.ndimage
improvements
axes
argument was added torank_filter
,percentile_filter
,
median_filter
,uniform_filter
,minimum_filter
,
maximum_filter
, andgaussian_filter
, which can be useful for
processing stacks of image data.
scipy.optimize
improvements
scipy.optimize.linprog
now passes unrecognized options directly to HiGHS.scipy.optimize.root_scalar
now uses Newton's method to be used without
providingfprime
and thesecant
method to be used without a second
guess.scipy.optimize.lsq_linear
now acceptsbounds
arguments of type
scipy.optimize.Bounds
.scipy.optimize.minimize
method='cobyla'
now supports simple bound
constraints.- Users can opt into a new callback interface for most methods of
scipy.optimize.minimize
: If the provided callback callable accepts
a single keyword argument,intermediate_result
,scipy.optimize.minimize
now passes both the current solution and the optimal value of the objective
function to the callback as an instance ofscipy.optimize.OptimizeResult
.
It also allows the user to terminate optimization by raising a
StopIteration
exception from the callback function.
scipy.optimize.minimize
will return normally, and the latest solution
information is provided in the result object. scipy.optimize.curve_fit
now supports an optionalnan_policy
argument.scipy.optimize.shgo
now has parallelization with theworkers
argument,
symmetry arguments that can improve performance, class-based design to
improve usability, and generally improved performance.
scipy.signal
improvements
istft
has an improved warning message when the NOLA condition fails.
scipy.sparse
improvements
- A new public base class
scipy.sparse.sparray
was introduced, allowing further
extension of the sparse array API (such as the support for 1-dimensional
sparse arrays) without breaking backwards compatibility.
isinstance(x, scipy.sparse.sparray)
to select the new sparse array classes,
whileisinstance(x, scipy.sparse.spmatrix)
selects only the old sparse
matrix classes. - Division of sparse arrays by a dense array now returns sparse arrays.
scipy.sparse.isspmatrix
now only returnsTrue
for the sparse matrices instances.
scipy.sparse.issparse
now has to be used instead to check for instances of sparse
arrays or instances of sparse matrices.- Sparse arrays constructed with int64 indices will no longer automatically
downcast to int32. - The
argmin
andargmax
methods now return the correct result when explicit
zeros are present.
scipy.sparse.linalg
improvements
- dividing
LinearOperator
by a number now returns a
_ScaledLinearOperator
LinearOperator
now supports right multiplication by arrayslobpcg
should be more efficient following removal of an extraneous
QR decomposition.
scipy.spatial
improvements
- Usage of new C++ backend for additional distance metrics, the majority of
which will see substantial performance improvements, though a few minor
regressions are known. These are focused on distances between boolean
arrays.
scipy.special
improvements
- The factorial functions
factorial
,factorial2
andfactorialk
were made consistent in their behavior (in terms of dimensionality,
errors etc.). Additionally,factorial2
can now handle arrays with
exact=True
, andfactorialk
can handle arrays.
scipy.stats
improvements
New Features
scipy.stats.sobol_indices
, a method to compute Sobol' sensitivity indices.scipy.stats.dunnett
, which performs Dunnett's test of the means of multiple
experimental groups against the mean of a control group.scipy.stats.ecdf
for computing the empirical CDF and complementary
CDF (survival function / SF) from uncensored or right-censored data. This
function is also useful for survival analysis / Kaplan-Meier estimation.scipy.stats.logrank
to compare survival functions underlying samples.scipy.stats.false_discovery_control
for adjusting p-values to control the
false discovery rate of multiple hypothesis tests using the
Benjamini-Hochberg or Benjamini-Yekutieli procedures.scipy.stats.CensoredData
to represent censored data. It can be used as
input to thefit
method of univariate distributions and to the new
ecdf
function.- Filliben's goodness of fit test as
method='Filliben'
of
scipy.stats.goodness_of_fit
. scipy.stats.ttest_ind
has a new method,confidence_interval
for
computing a confidence interval of the difference between means.scipy.stats.MonteCarloMethod
,scipy.stats.PermutationMethod
, and
scipy.stats.BootstrapMethod
are new classes to configure resampling and/or
Monte Carlo versions of hypothesis tests. They can currently be used with
scipy.stats.pearsonr
.
Statistical Distributions
-
Added the von-Mises Fisher distribution as
scipy.stats.vonmises_fisher
.
This distribution is the most common analogue of the normal distribution
on the unit sphere. -
Added the relativistic Breit-Wigner distribution as
scipy.stats.rel_breitwigner
.
It is used in high energy physics to model resonances. -
Added the Dirichlet multinomial distribution as
scipy.stats.dirichlet_multinomial
. -
Improved the speed and precision of several univariate statistical
distributions.scipy.stats.anglit
sf
scipy.stats.beta
entropy
scipy.stats.betaprime
cdf
,sf
,ppf
scipy.stats.chi
entropy
scipy.stats.chi2
entropy
scipy.stats.dgamma
entropy
,cdf
,sf
,ppf
, andisf
scipy.stats.dweibull
entropy
,sf
, andisf
scipy.stats.exponweib
sf
andisf
scipy.stats.f
entropy
scipy.stats.foldcauchy
sf
scipy.stats.foldnorm
cdf
andsf
scipy.stats.gamma
entropy
scipy.stats.genexpon
ppf
,isf
,rvs
scipy.stats.gengamma
entropy
scipy.stats.geom
entropy
scipy.stats.genlogistic
entropy
,logcdf
,sf
,ppf
,
andisf
scipy.stats.genhyperbolic
cdf
andsf
scipy.stats.gibrat
sf
andisf
scipy.stats.gompertz
entropy
,sf
. andisf
scipy.stats.halflogistic
sf
, andisf
scipy.stats.halfcauchy
sf
andisf
scipy.stats.halfnorm
cdf
,sf
, andisf
scipy.stats.invgamma
entropy
scipy.stats.invgauss
entropy
scipy.stats.johnsonsb
pdf
,cdf
,sf
,ppf
, andisf
scipy.stats.johnsonsu
pdf
,sf
,isf
, andstats
scipy.stats.lognorm
fit
scipy.stats.loguniform
entropy
,logpdf
,pdf
,cdf
,ppf
,
andstats
scipy.stats.maxwell
sf
andisf
scipy.stats.nakagami
entropy
scipy.stats.powerlaw
sf
scipy.stats.powerlognorm
logpdf
,logsf
,sf
, andisf
scipy.stats.powernorm
sf
andisf
scipy.stats.t
entropy
,logpdf
, andpdf
scipy.stats.truncexpon
sf
, andisf
scipy.stats.truncnorm
entropy
scipy.stats.truncpareto
fit
scipy.stats.vonmises
fit
-
scipy.stats.multivariate_t
now hascdf
andentropy
methods. -
scipy.stats.multivariate_normal
,scipy.stats.matrix_normal
, and
scipy.stats.invwishart
now have anentropy
method.
Other Improvements
scipy.stats.monte_carlo_test
now supports multi-sample statistics.scipy.stats.bootstrap
can now produce one-sided confidence intervals.scipy.stats.rankdata
performance was improved formethod=ordinal
and
method=dense
.scipy.stats.moment
now supports non-central moment calculation.scipy.stats.anderson
now supports theweibull_min
distribution.scipy.stats.sem
andscipy.stats.iqr
now supportaxis
,nan_policy
,
and masked array input.
Deprecated features
- Multi-Ellipsis sparse matrix indexing has been deprecated and will
be removed in SciPy 1.13. - Several methods were deprecated for sparse arrays:
asfptype
,getrow
,
getcol
,get_shape
,getmaxprint
,set_shape
,
getnnz
, andgetformat
. Additionally, the.A
and.H
attributes were deprecated. Sparse matrix types are not affected. - The
scipy.linalg
functionstri
,triu
&tril
are deprecated and
will be removed in SciPy 1.13. Users are recommended to use the NumPy
versions of these functions with identical names. - The
scipy.signal
functionsbspline
,quadratic
&cubic
are
deprecated and will be removed in SciPy 1.13. Users are recommended to use
scipy.interpolate.BSpline
instead. - The
even
keyword ofscipy.integrate.simpson
is deprecated and will be
removed in SciPy 1.13.0. Users should leave this as the default as this
gives improved accuracy compared to the other methods. - Using
exact=True
when passing integers in a float array tofactorial
is deprecated and will be removed in SciPy 1.13.0. - float128 and object dtypes are deprecated for
scipy.signal.medfilt
and
scipy.signal.order_filter
- The functions
scipy.signal.{lsim2, impulse2, step2}
had long been
deprecated in documentation only. They now raise a DeprecationWarning and
will be removed in SciPy 1.13.0. - Importing window functions directly from
scipy.window
has been soft
deprecated since SciPy 1.1.0. They now raise aDeprecationWarning
and
will be removed in SciPy 1.13.0. Users should instead import them from
scipy.signal.window
or use the convenience function
scipy.signal.get_window
.
Backwards incompatible changes
- The default for the
legacy
keyword ofscipy.special.comb
has changed
fromTrue
toFalse
, as announced since its introduction.
Expired Deprecations
There is an ongoing effort to follow through on long-standing deprecations.
The following previously deprecated features are affected:
- The
n
keyword has been removed fromscipy.stats.moment
. - The
alpha
keyword has been removed fromscipy.stats.interval
. - The misspelt
gilbrat
distribution has been removed (use
scipy.stats.gibrat
). - The deprecated spelling of the
kulsinski
distance metric has been
removed (usescipy.spatial.distance.kulczynski1
). - The
vertices
keyword ofscipy.spatial.Delauney.qhull
has been removed
(use simplices). - The
residual
property ofscipy.sparse.csgraph.maximum_flow
has been
removed (useflow
). - The
extradoc
keyword ofscipy.stats.rv_continuous
,
scipy.stats.rv_discrete
andscipy.stats.rv_sample
has been removed. - The
sym_pos
keyword ofscipy.linalg.solve
has been removed. - The
scipy.optimize.minimize
function now raises an error forx0
with
x0.ndim > 1
. - In
scipy.stats.mode
, the default value ofkeepdims
is nowFalse
,
and support for non-numeric input has been removed. - The function
scipy.signal.lsim
does not support non-uniform time steps
anymore.
Other changes
- Rewrote the source build docs and restructured the contributor guide.
- Improved support for cross-compiling with meson build system.
- MyST-NB notebook infrastructure has been added to our documentation.
Authors
- h-vetinari (69)
- Oriol Abril-Pla (1) +
- Tom Adamczewski (1) +
- Anton Akhmerov (13)
- Andrey Akinshin (1) +
- alice (1) +
- Oren Amsalem (1)
- Ross Barnowski (13)
- Christoph Baumgarten (2)
- Dawson Beatty (1) +
- Doron Behar (1) +
- Peter Bell (1)
- John Belmonte (1) +
- boeleman (1) +
- Jack Borchanian (1) +
- Matt Borland (3) +
- Jake Bowhay (41)
- Larry Bradley (1) +
- Sienna Brent (1) +
- Matthew Brett (1)
- Evgeni Burovski (39)
- Matthias Bussonnier (2)
- Maria Cann (1) +
- Alfredo Carella (1) +
- CJ Carey (34)
- Hood Chatham (2)
- Anirudh Dagar (3)
- Alberto Defendi (1) +
- Pol del Aguila (1) +
- Hans Dembinski (1)
- Dennis (1) +
- Vinayak Dev (1) +
- Thomas Duvernay (1)
- DWesl (4)
- Stefan Endres (66)
- Evandro (1) +
- Tom Eversdijk (2) +
- Isuru Fernando (1)
- Franz Forstmayr (4)
- Joseph Fox-Rabinovitz (1)
- Stefano Frazzetto (1) +
- Neil Girdhar (1)
- Caden Gobat (1) +
- Ralf Gommers (153)
- GonVas (1) +
- Marco Gorelli (1)
- Brett Graham (2) +
- Matt Haberland (388)
- harshvardhan2707 (1) +
- Alex Herbert (1) +
- Guillaume Horel (1)
- Geert-Jan Huizing (1) +
- Jakob Jakobson (2)
- Julien Jerphanion (10)
- jyuv (2)
- Rajarshi Karmakar (1) +
- Ganesh Kathiresan (3) +
- Robert Kern (4)
- Andrew Knyazev (4)
- Sergey Koposov (1)
- Rishi Kulkarni (2) +
- Eric Larson (1)
- Zoufiné Lauer-Bare (2) +
- Antony Lee (3)
- Gregory R. Lee (8)
- Guillaume Lemaitre (2) +
- lilinjie (2) +
- Yannis Linardos (1) +
- Christian Lorentzen (5)
- Loïc Estève (1)
- Adam Lugowski (1) +
- Charlie Marsh (2) +
- Boris Martin (1) +
- Nicholas McKibben (11)
- Melissa Weber Mendonça (58)
- Michał Górny (1) +
- Jarrod Millman (5)
- Stefanie Molin (2) +
- Mark W. Mueller (1) +
- mustafacevik (1) +
- Takumasa N (1) +
- nboudrie (1)
- Andrew Nelson (112)
- Nico Schlömer (4)
- Lysandros Nikolaou (2) +
- Kyle Oman (1)
- OmarManzoor (2) +
- Simon Ott (1) +
- Geoffrey Oxberry (1) +
- Geoffrey M. Oxberry (2) +
- Sravya papaganti (1) +
- Tirth Patel (2)
- Ilhan Polat (32)
- Quentin Barthélemy (1)
- Matteo Raso (12) +
- Tyler Reddy (143)
- Lucas Roberts (1)
- Pamphile Roy (225)
- Jordan Rupprecht (1) +
- Atsushi Sakai (11)
- Omar Salman (7) +
- Leo Sandler (1) +
- Ujjwal Sarswat (3) +
- Saumya (1) +
- Daniel Schmitz (79)
- Henry Schreiner (2) +
- Dan Schult (8) +
- Eli Schwartz (6)
- Tomer Sery (2) +
- Scott Shambaugh (10) +
- Gagandeep Singh (1)
- Ethan Steinberg (6) +
- stepeos (2) +
- Albert Steppi (3)
- Strahinja Lukić (1)
- Kai Striega (4)
- suen-bit (1) +
- Tartopohm (2)
- Logan Thomas (2) +
- Jacopo Tissino (1) +
- Matus Valo (12) +
- Jacob Vanderplas (2)
- Christian Veenhuis (1) +
- Isaac Virshup (3)
- Stefan van der Walt (14)
- Warren Weckesser (63)
- windows-server-2003 (1)
- Levi John Wolf (3)
- Nobel Wong (1) +
- Benjamin Yeh (1) +
- Rory Yorke (1)
- Younes (2) +
- Zaikun ZHANG (1) +
- Alex Zverianskii (1) +
A total of 134 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.