SciPy 0.13.0 发行说明#

SciPy 0.13.0 是 7 个月辛勤工作的结晶。它包含许多新功能、大量错误修复、提高的测试覆盖率和更好的文档。此版本中有一些弃用和 API 更改,其详细说明如下。由于包含大量的错误修复和优化,建议所有用户升级到此版本。此外,我们的开发重心现在将转向 0.13.x 分支的错误修复版本,以及在主分支(master branch)上添加新功能。

此版本需要 Python 2.6、2.7 或 3.1-3.3 以及 NumPy 1.5.1 或更高版本。此版本的亮点包括:

  • 支持稀疏矩阵的花式索引和布尔比较

  • linalg 模块中的插值分解和矩阵函数

  • 两个用于无约束最小化的新置信域求解器

新功能#

scipy.integrate 改进#

N 维数值积分#

新增了一个函数 scipy.integrate.nquad,它提供 N 维积分功能,且比 dblquadtplquad 具有更灵活的接口。

dopri* 改进#

现在可以通过 solout 回调函数访问来自 dopri 系列 ODE 求解器的中间结果。

scipy.linalg 改进#

插值分解#

Scipy 现在包含一个新模块 scipy.linalg.interpolative,其中包含用于计算插值矩阵分解 (ID) 的例程。此功能基于 P.G. Martinsson、V. Rokhlin、Y. Shkolnisky 和 M. Tygert 开发的 ID 软件包,该软件包之前已由 K.L. Ho 在 PymatrixId 包中适配至 Python。

极分解#

新增了一个用于计算矩阵极分解的函数 scipy.linalg.polar

BLAS 第 3 级函数#

BLAS 函数 symm, syrk, syr2k, hemm, herkher2k 现在已封装在 scipy.linalg 中。

矩阵函数#

根据 Nick Higham 及其合著者近期论文中的详细描述,实现或更新了几种矩阵函数算法。其中包括矩阵平方根 (sqrtm)、矩阵对数 (logm)、矩阵指数 (expm) 及其 Frechet 导数 (expm_frechet),以及分数矩阵幂 (fractional_matrix_power)。

scipy.optimize 改进#

置信域无约束最小化算法#

minimize 函数增加了两个用于无约束最小化的置信域求解器:doglegtrust-ncg

scipy.sparse 改进#

布尔比较和稀疏矩阵#

所有稀疏矩阵类型现在都支持布尔数据和布尔运算。两个稀疏矩阵 AB 可以通过所有预期的方式进行比较,如 A < B, A >= B, A != B,产生与密集 Numpy 数组类似的结果。同时也支持与密集矩阵和标量的比较。

CSR 和 CSC 花式索引#

压缩稀疏行 (CSR) 和压缩稀疏列 (CSC) 矩阵类型现在支持使用布尔矩阵、切片和列表进行花式索引。因此,当 A 是(CSC 或 CSR)稀疏矩阵时,您可以执行类似的操作

>>> A[A > 0.5] = 1  # since Boolean sparse matrices work
>>> A[:2, :3] = 2
>>> A[[1,2], 2] = 3

scipy.sparse.linalg 改进#

新函数 onenormest 提供了线性算子 1-范数的下界,并根据 Higham 和 Tisseur (2000) 的方法实现。此函数不仅对稀疏矩阵有用,还可以用于估计密集矩阵乘积或幂的范数,而无需显式构建中间矩阵。

线性算子矩阵指数的乘法作用 (expm_multiply) 已根据 Al-Mohy 和 Higham (2011) 的描述实现。

抽象线性算子 (scipy.sparse.linalg.LinearOperator) 现在可以进行乘法、相互加法和取幂运算,从而生成新的线性算子。这使得构建复合线性运算更加容易。

scipy.spatial 改进#

现在可以通过 vertices 属性访问 ConvexHull(凸包)的顶点,该属性在二维空间中提供正确的方向。

scipy.signal 改进#

新增了余弦窗函数 scipy.signal.cosine

scipy.special 改进#

新增了函数 scipy.special.xlogyscipy.special.xlog1py。这些函数可以简化并加速必须计算 x * log(y) 的代码,并在 x == 0 时返回 0。

scipy.io 改进#

无格式 Fortran 文件读取器#

新类 scipy.io.FortranFile 方便读取由 Fortran 代码编写的无格式顺序文件。

scipy.io.wavfile 增强#

scipy.io.wavfile.write 现在接受文件缓冲区。以前它只接受文件名。

scipy.io.wavfile.readscipy.io.wavfile.write 现在可以处理浮点型 WAV 文件。

scipy.interpolate 改进#

B 样条导数和原函数#

新增了 scipy.interpolate.splderscipy.interpolate.splantider 函数,用于计算表示 B 样条导数和原函数的 B 样条。这些函数在基于类的 FITPACK 接口中也可作为 UnivariateSpline.derivativeUnivariateSpline.antiderivative 使用。

scipy.stats 改进#

分布(Distributions)现在允许在所有方法中同时使用关键字参数和位置参数。

新增了 scipy.stats.power_divergence 函数,用于 Cressie-Read 幂散度统计量和拟合优度检验。该统计量系列中包含了 “G 检验” (https://en.wikipedia.org/wiki/G-test)。

scipy.stats.mood 现在接受多维输入。

scipy.stats.wilcoxon 添加了连续性校正选项。

scipy.stats.chisquare 现在拥有 axis 参数。

scipy.stats.mstats.chisquare 现在拥有 axisddof 参数。

弃用的功能#

expm2expm3#

矩阵指数函数 scipy.linalg.expm2scipy.linalg.expm3 已弃用。所有用户应改用数值上更稳健的 scipy.linalg.expm 函数。

scipy.stats 函数#

scipy.stats.oneway 已弃用;应改用 scipy.stats.f_oneway

scipy.stats.glm 已弃用。scipy.stats.ttest_ind 是一个等效函数;在 statsmodels 中可以找到功能更全面的通用(及广义)线性模型实现。

scipy.stats.cmedian 已弃用;应改用 numpy.median

向后不兼容的更改#

LIL 矩阵赋值#

使用两个索引数组向 LIL 矩阵赋值的行为现在与向 ndarray 赋值类似,

>>> x = lil_matrix((3, 3))
>>> x[[0,1,2],[0,1,2]]=[0,1,2]
>>> x.todense()
matrix([[ 0.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  2.]])

而不是给出之前的结果。

>>> x.todense()
matrix([[ 0.,  1.,  2.],
        [ 0.,  1.,  2.],
        [ 0.,  1.,  2.]])

依赖于先前行为的用户需要重新检查其代码。先前的行为可以通过 x[numpy.ix_([0,1,2],[0,1,2])] = ... 来实现。

已移除弃用的 radon 函数#

misc.radon 函数(在 scipy 0.11.0 中已弃用)现已移除。用户可以在 scikit-image 中找到功能更全面的 radon 函数。

stats.distributions 中移除了弃用的关键字 xaxb#

自 0.11.0 起弃用的关键字 xaxb 已从 scipy.stats 的分布中移除。

MATLAB 文件读取器 / 写入器的更改#

主要的变动是,numpy 中的一维数组在保存为 MATLAB 5 格式文件时,现在会变成行向量(形状为 1, N)。以前,一维数组被保存为列向量 (N, 1)。此举是为了统一写入 MATLAB 4 和 5 格式的行为,并适应 numpy 和 MATLAB 的默认行为——例如 np.atleast_2d 将一维数组作为行向量返回。

尝试以 MATLAB 4 格式保存超过 2 维的数组现在会引发错误,而不是静默地将数组重塑为 2D。

scipy.io.loadmat('afile') 以前会在 Python 系统路径 (sys.path) 中寻找 afile;现在对于相对路径文件名,loadmat 只会在当前目录下查找。

其他更改#

安全修复:scipy.weave 之前在某些情况下以不安全的方式使用临时目录。

现在构建 未发布 版本的 scipy 需要 Cython。从 Cython 源生成的 C 文件不再包含在 git 仓库中。不过,它们仍会在源代码发行版中提供。

代码库进行了相当大规模的 PEP8 清理。添加了 tox pep8 命令;新代码应通过此测试命令。

Scipy 不能再使用 gfortran 4.1 编译(至少在 RH5 上),这可能是由于该编译器版本不能很好地支持 entry 结构。

作者#

此版本包含了以下人员的工作(在此版本中至少贡献了一个补丁,按姓名首字母排序)

  • Jorge Cañardo Alastuey +

  • Tom Aldcroft +

  • Max Bolingbroke +

  • Joseph Jon Booker +

  • François Boulogne

  • Matthew Brett

  • Christian Brodbeck +

  • Per Brodtkorb +

  • Christian Brueffer +

  • Lars Buitinck

  • Evgeni Burovski +

  • Tim Cera

  • Lawrence Chan +

  • David Cournapeau

  • Dražen Lučanin +

  • Alexander J. Dunlap +

  • endolith

  • André Gaul +

  • Christoph Gohlke

  • Ralf Gommers

  • Alex Griffing +

  • Blake Griffith +

  • Charles Harris

  • Bob Helmbold +

  • Andreas Hilboll

  • Kat Huang +

  • Oleksandr (Sasha) Huziy +

  • Gert-Ludwig Ingold +

  • Thouis (Ray) Jones

  • Juan Luis Cano Rodríguez +

  • Robert Kern

  • Andreas Kloeckner +

  • Sytse Knypstra +

  • Gustav Larsson +

  • Denis Laxalde

  • Christopher Lee

  • Tim Leslie

  • Wendy Liu +

  • Clemens Novak +

  • Takuya Oshima +

  • Josef Perktold

  • Illia Polosukhin +

  • Przemek Porebski +

  • Steve Richardson +

  • Branden Rolston +

  • Skipper Seabold

  • Fazlul Shahriar

  • Leo Singer +

  • Rohit Sivaprasad +

  • Daniel B. Smith +

  • Julian Taylor

  • Louis Thibault +

  • Tomas Tomecek +

  • John Travers

  • Richard Tsai +

  • Jacob Vanderplas

  • Patrick Varilly

  • Pauli Virtanen

  • Stefan van der Walt

  • Warren Weckesser

  • Pedro Werneck +

  • Nils Werner +

  • Michael Wimmer +

  • Nathan Woods +

  • Tony S. Yu +

共有 65 人为本版本做出了贡献。名字旁带有 “+” 的人为首次贡献补丁。