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.
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 graph
- laplacian - compute the laplacian of a graph
- shortest_path - compute the shortest path between points on a positive graph
- dijkstra - use Dijkstra’s algorithm for shortest path
- floyd_warshall - use the Floyd-Warshall algorithm for shortest path
- breadth_first_order - compute a breadth-first order of nodes
- depth_first_order - compute a depth-first order of nodes
- breadth_first_tree - construct the breadth-first tree from a given node
- depth_first_tree - construct a depth-first tree from a given node
- minimum_spanning_tree - construct the minimum spanning tree of a graph
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:
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.
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.
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.
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, an iterative method for solving (sparse) linear and linear least-squares systems, was added as scipy.sparse.linalg.lsmr.
Bindings for the discrete sine transform functions have been added to scipy.fftpack.
For interpolation in spherical coordinates, the three classes scipy.interpolate.SmoothSphereBivariateSpline, scipy.interpolate.LSQSphereBivariateSpline, and scipy.interpolate.RectSphereBivariateSpline have been added.
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.
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.
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(, tck) 4. >>> splev(1, tck) 4.
>>> splev(, tck) array([ 4.]) >>> splev(1, tck) array(4.)
This affects also the UnivariateSpline classes.
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
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.