SciPy 1.11.0
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.sparsearray API improvements, includingsparse.sparray, a new
public base class distinct from the oldersparse.spmatrixclass,
proper 64-bit index support, and numerous deprecations paving the way to a
modern sparse array experience. scipy.statsadded 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 functionsdetandlunow accept nD-arrays. - An
axesargument was added broadly tondimagefunctions, facilitating
analysis of stacked image data.
New features
scipy.integrate improvements
- Added
scipy.integrate.qmc_quadfor quasi-Monte Carlo integration. - For an even number of points,
scipy.integrate.simpsonnow calculates
a parabolic segment over the last three points which gives improved
accuracy over the previous implementation.
scipy.cluster improvements
disjoint_sethas a new methodsubset_sizefor providing the size
of a particular subset.
scipy.constants improvements
- The
quetta,ronna,ronto, andquectoSI prefixes were added.
scipy.linalg improvements
scipy.linalg.detis improved and now accepts nD-arrays.scipy.linalg.luis improved and now accepts nD-arrays. With the new
p_indicesswitch the output permutation argument can be 1D(n,)
permutation index instead of the full(n, n)array.
scipy.ndimage improvements
axesargument 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.linprognow passes unrecognized options directly to HiGHS.scipy.optimize.root_scalarnow uses Newton's method to be used without
providingfprimeand thesecantmethod to be used without a second
guess.scipy.optimize.lsq_linearnow acceptsboundsarguments of type
scipy.optimize.Bounds.scipy.optimize.minimizemethod='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
StopIterationexception from the callback function.
scipy.optimize.minimizewill return normally, and the latest solution
information is provided in the result object. scipy.optimize.curve_fitnow supports an optionalnan_policyargument.scipy.optimize.shgonow has parallelization with theworkersargument,
symmetry arguments that can improve performance, class-based design to
improve usability, and generally improved performance.
scipy.signal improvements
istfthas an improved warning message when the NOLA condition fails.
scipy.sparse improvements
- A new public base class
scipy.sparse.sparraywas 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.isspmatrixnow only returnsTruefor the sparse matrices instances.
scipy.sparse.issparsenow 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
argminandargmaxmethods now return the correct result when explicit
zeros are present.
scipy.sparse.linalg improvements
- dividing
LinearOperatorby a number now returns a
_ScaledLinearOperator LinearOperatornow supports right multiplication by arrayslobpcgshould 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,factorial2andfactorialk
were made consistent in their behavior (in terms of dimensionality,
errors etc.). Additionally,factorial2can now handle arrays with
exact=True, andfactorialkcan 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.ecdffor 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.logrankto compare survival functions underlying samples.scipy.stats.false_discovery_controlfor adjusting p-values to control the
false discovery rate of multiple hypothesis tests using the
Benjamini-Hochberg or Benjamini-Yekutieli procedures.scipy.stats.CensoredDatato represent censored data. It can be used as
input to thefitmethod of univariate distributions and to the new
ecdffunction.- Filliben's goodness of fit test as
method='Filliben'of
scipy.stats.goodness_of_fit. scipy.stats.ttest_indhas a new method,confidence_intervalfor
computing a confidence interval of the difference between means.scipy.stats.MonteCarloMethod,scipy.stats.PermutationMethod, and
scipy.stats.BootstrapMethodare 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.anglitsfscipy.stats.betaentropyscipy.stats.betaprimecdf,sf,ppfscipy.stats.chientropyscipy.stats.chi2entropyscipy.stats.dgammaentropy,cdf,sf,ppf, andisfscipy.stats.dweibullentropy,sf, andisfscipy.stats.exponweibsfandisfscipy.stats.fentropyscipy.stats.foldcauchysfscipy.stats.foldnormcdfandsfscipy.stats.gammaentropyscipy.stats.genexponppf,isf,rvsscipy.stats.gengammaentropyscipy.stats.geomentropyscipy.stats.genlogisticentropy,logcdf,sf,ppf,
andisfscipy.stats.genhyperboliccdfandsfscipy.stats.gibratsfandisfscipy.stats.gompertzentropy,sf. andisfscipy.stats.halflogisticsf, andisfscipy.stats.halfcauchysfandisfscipy.stats.halfnormcdf,sf, andisfscipy.stats.invgammaentropyscipy.stats.invgaussentropyscipy.stats.johnsonsbpdf,cdf,sf,ppf, andisfscipy.stats.johnsonsupdf,sf,isf, andstatsscipy.stats.lognormfitscipy.stats.loguniformentropy,logpdf,pdf,cdf,ppf,
andstatsscipy.stats.maxwellsfandisfscipy.stats.nakagamientropyscipy.stats.powerlawsfscipy.stats.powerlognormlogpdf,logsf,sf, andisfscipy.stats.powernormsfandisfscipy.stats.tentropy,logpdf, andpdfscipy.stats.truncexponsf, andisfscipy.stats.truncnormentropyscipy.stats.truncparetofitscipy.stats.vonmisesfit
-
scipy.stats.multivariate_tnow hascdfandentropymethods. -
scipy.stats.multivariate_normal,scipy.stats.matrix_normal, and
scipy.stats.invwishartnow have anentropymethod.
Other Improvements
scipy.stats.monte_carlo_testnow supports multi-sample statistics.scipy.stats.bootstrapcan now produce one-sided confidence intervals.scipy.stats.rankdataperformance was improved formethod=ordinaland
method=dense.scipy.stats.momentnow supports non-central moment calculation.scipy.stats.andersonnow supports theweibull_mindistribution.scipy.stats.semandscipy.stats.iqrnow 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.Aand.H
attributes were deprecated. Sparse matrix types are not affected. - The
scipy.linalgfunctionstri,triu&trilare 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.signalfunctionsbspline,quadratic&cubicare
deprecated and will be removed in SciPy 1.13. Users are recommended to use
scipy.interpolate.BSplineinstead. - The
evenkeyword ofscipy.integrate.simpsonis 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=Truewhen 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.medfiltand
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.windowhas been soft
deprecated since SciPy 1.1.0. They now raise aDeprecationWarningand
will be removed in SciPy 1.13.0. Users should instead import them from
scipy.signal.windowor use the convenience function
scipy.signal.get_window.
Backwards incompatible changes
- The default for the
legacykeyword ofscipy.special.combhas changed
fromTruetoFalse, 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
nkeyword has been removed fromscipy.stats.moment. - The
alphakeyword has been removed fromscipy.stats.interval. - The misspelt
gilbratdistribution has been removed (use
scipy.stats.gibrat). - The deprecated spelling of the
kulsinskidistance metric has been
removed (usescipy.spatial.distance.kulczynski1). - The
verticeskeyword ofscipy.spatial.Delauney.qhullhas been removed
(use simplices). - The
residualproperty ofscipy.sparse.csgraph.maximum_flowhas been
removed (useflow). - The
extradockeyword ofscipy.stats.rv_continuous,
scipy.stats.rv_discreteandscipy.stats.rv_samplehas been removed. - The
sym_poskeyword ofscipy.linalg.solvehas been removed. - The
scipy.optimize.minimizefunction now raises an error forx0with
x0.ndim > 1. - In
scipy.stats.mode, the default value ofkeepdimsis nowFalse,
and support for non-numeric input has been removed. - The function
scipy.signal.lsimdoes 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.