# SciPy 0.11.0 Release Notes¶

Contents

- SciPy 0.11.0 Release Notes
- New features
- Deprecated features
- Backwards incompatible changes
- Other changes
- Authors

SciPy 0.11.0 is the culmination of 8 months of hard work. It contains many new features, numerous bug-fixes, improved test coverage and better documentation. Highlights of this release are:

- A new module has been added which provides a number of common sparse graph algorithms.
- New unified interfaces to the existing optimization and root finding functions have been added.

All users are encouraged to upgrade to this release, as there are a large number of bug-fixes and optimizations. Our development attention will now shift to bug-fix releases on the 0.11.x branch, and on adding new features on the master branch.

This release requires Python 2.4-2.7 or 3.1-3.2 and NumPy 1.5.1 or greater.

## New features¶

### Sparse Graph Submodule¶

The new submodule `scipy.sparse.csgraph` implements a number of efficient
graph algorithms for graphs stored as sparse adjacency matrices. Available
routines are:

connected_components- determine connected components of a graphlaplacian- compute the laplacian of a graphshortest_path- compute the shortest path between points on a positive graphdijkstra- use Dijkstra’s algorithm for shortest pathfloyd_warshall- use the Floyd-Warshall algorithm for shortest pathbreadth_first_order- compute a breadth-first order of nodesdepth_first_order- compute a depth-first order of nodesbreadth_first_tree- construct the breadth-first tree from a given nodedepth_first_tree- construct a depth-first tree from a given nodeminimum_spanning_tree- construct the minimum spanning tree of a graph

`scipy.optimize` improvements¶

The optimize module has received a lot of attention this release. In addition to added tests, documentation improvements, bug fixes and code clean-up, the following improvements were made:

- A unified interface to minimizers of univariate and multivariate functions has been added.
- A unified interface to root finding algorithms for multivariate functions has been added.
- The L-BFGS-B algorithm has been updated to version 3.0.

#### Unified interfaces to minimizers¶

Two new functions `scipy.optimize.minimize` and
`scipy.optimize.minimize_scalar` were added to provide a common interface
to minimizers of multivariate and univariate functions respectively.
For multivariate functions, `scipy.optimize.minimize` provides an
interface to methods for unconstrained optimization (*fmin*, *fmin_powell*,
*fmin_cg*, *fmin_ncg*, *fmin_bfgs* and *anneal*) or constrained
optimization (*fmin_l_bfgs_b*, *fmin_tnc*, *fmin_cobyla* and *fmin_slsqp*).
For univariate functions, `scipy.optimize.minimize_scalar` provides an
interface to methods for unconstrained and bounded optimization (*brent*,
*golden*, *fminbound*).
This allows for easier comparing and switching between solvers.

#### Unified interface to root finding algorithms¶

The new function `scipy.optimize.root` provides a common interface to
root finding algorithms for multivariate functions, embeding *fsolve*,
*leastsq* and *nonlin* solvers.

`scipy.linalg` improvements¶

#### New matrix equation solvers¶

Solvers for the Sylvester equation (`scipy.linalg.solve_sylvester`, discrete
and continuous Lyapunov equations (`scipy.linalg.solve_lyapunov`,
`scipy.linalg.solve_discrete_lyapunov`) and discrete and continuous algebraic
Riccati equations (`scipy.linalg.solve_continuous_are`,
`scipy.linalg.solve_discrete_are`) have been added to `scipy.linalg`.
These solvers are often used in the field of linear control theory.

#### QZ and QR Decomposition¶

It is now possible to calculate the QZ, or Generalized Schur, decomposition
using `scipy.linalg.qz`. This function wraps the LAPACK routines sgges,
dgges, cgges, and zgges.

The function `scipy.linalg.qr_multiply`, which allows efficient computation
of the matrix product of Q (from a QR decompostion) and a vector, has been
added.

#### Pascal matrices¶

A function for creating Pascal matrices, `scipy.linalg.pascal`, was added.

### Sparse matrix construction and operations¶

Two new functions, `scipy.sparse.diags` and `scipy.sparse.block_diag`, were
added to easily construct diagonal and block-diagonal sparse matrices
respectively.

`scipy.sparse.csc_matrix` and `csr_matrix` now support the operations
`sin`, `tan`, `arcsin`, `arctan`, `sinh`, `tanh`, `arcsinh`,
`arctanh`, `rint`, `sign`, `expm1`, `log1p`, `deg2rad`, `rad2deg`,
`floor`, `ceil` and `trunc`. Previously, these operations had to be
performed by operating on the matrices’ `data` attribute.

### LSMR iterative solver¶

LSMR, an iterative method for solving (sparse) linear and linear
least-squares systems, was added as `scipy.sparse.linalg.lsmr`.

### Discrete Sine Transform¶

Bindings for the discrete sine transform functions have been added to
`scipy.fftpack`.

`scipy.interpolate` improvements¶

For interpolation in spherical coordinates, the three classes
`scipy.interpolate.SmoothSphereBivariateSpline`,
`scipy.interpolate.LSQSphereBivariateSpline`, and
`scipy.interpolate.RectSphereBivariateSpline` have been added.

### Binned statistics (`scipy.stats`)¶

The stats module has gained functions to do binned statistics, which are a
generalization of histograms, in 1-D, 2-D and multiple dimensions:
`scipy.stats.binned_statistic`, `scipy.stats.binned_statistic_2d` and
`scipy.stats.binned_statistic_dd`.

## Deprecated features¶

`scipy.sparse.cs_graph_components` has been made a part of the sparse graph
submodule, and renamed to `scipy.sparse.csgraph.connected_components`.
Calling the former routine will result in a deprecation warning.

`scipy.misc.radon` has been deprecated. A more full-featured radon transform
can be found in scikits-image.

`scipy.io.save_as_module` has been deprecated. A better way to save multiple
Numpy arrays is the `numpy.savez` function.

The *xa* and *xb* parameters for all distributions in
`scipy.stats.distributions` already weren’t used; they have now been
deprecated.

## Backwards incompatible changes¶

### Removal of `scipy.maxentropy`¶

The `scipy.maxentropy` module, which was deprecated in the 0.10.0 release,
has been removed. Logistic regression in scikits.learn is a good and modern
alternative for this functionality.

### Minor change in behavior of `splev`¶

The spline evaluation function now behaves similarly to `interp1d`
for size-1 arrays. Previous behavior:

```
>>> from scipy.interpolate import splev, splrep, interp1d
>>> x = [1,2,3,4,5]
>>> y = [4,5,6,7,8]
>>> tck = splrep(x, y)
>>> splev([1], tck)
4.
>>> splev(1, tck)
4.
```

Corrected behavior:

```
>>> splev([1], tck)
array([ 4.])
>>> splev(1, tck)
array(4.)
```

This affects also the `UnivariateSpline` classes.

### Behavior of `scipy.integrate.complex_ode`¶

The behavior of the `y` attribute of `complex_ode` is changed.
Previously, it expressed the complex-valued solution in the form:

```
z = ode.y[::2] + 1j * ode.y[1::2]
```

Now, it is directly the complex-valued solution:

```
z = ode.y
```

### Minor change in behavior of T-tests¶

The T-tests `scipy.stats.ttest_ind`, `scipy.stats.ttest_rel` and
`scipy.stats.ttest_1samp` have been changed so that 0 / 0 now returns NaN
instead of 1.

## Other changes¶

The SuperLU sources in `scipy.sparse.linalg` have been updated to version 4.3
from upstream.

The function `scipy.signal.bode`, which calculates magnitude and phase data
for a continuous-time system, has been added.

The two-sample T-test `scipy.stats.ttest_ind` gained an option to compare
samples with unequal variances, i.e. Welch’s T-test.

`scipy.misc.logsumexp` now takes an optional `axis` keyword argument.

## Authors¶

This release contains work by the following people (contributed at least one patch to this release, names in alphabetical order):

- Jeff Armstrong
- Chad Baker
- Brandon Beacher +
- behrisch +
- borishim +
- Matthew Brett
- Lars Buitinck
- Luis Pedro Coelho +
- Johann Cohen-Tanugi
- David Cournapeau
- dougal +
- Ali Ebrahim +
- endolith +
- Bjørn Forsman +
- Robert Gantner +
- Sebastian Gassner +
- Christoph Gohlke
- Ralf Gommers
- Yaroslav Halchenko
- Charles Harris
- Jonathan Helmus +
- Andreas Hilboll +
- Marc Honnorat +
- Jonathan Hunt +
- Maxim Ivanov +
- Thouis (Ray) Jones
- Christopher Kuster +
- Josh Lawrence +
- Denis Laxalde +
- Travis Oliphant
- Joonas Paalasmaa +
- Fabian Pedregosa
- Josef Perktold
- Gavin Price +
- Jim Radford +
- Andrew Schein +
- Skipper Seabold
- Jacob Silterra +
- Scott Sinclair
- Alexis Tabary +
- Martin Teichmann
- Matt Terry +
- Nicky van Foreest +
- Jacob Vanderplas
- Patrick Varilly +
- Pauli Virtanen
- Nils Wagner +
- Darryl Wally +
- Stefan van der Walt
- Liming Wang +
- David Warde-Farley +
- Warren Weckesser
- Sebastian Werk +
- Mike Wimmer +
- Tony S Yu +

A total of 55 people contributed to this release. People with a “+” by their names contributed a patch for the first time.