SciPy 0.13.0 发布说明#

SciPy 0.13.0 是7个月辛勤工作的结晶。它包含许多新特性、大量的错误修复、改进的测试覆盖率和更好的文档。此版本中有一系列弃用和API变更,如下所述。建议所有用户升级到此版本,因为它包含了大量的错误修复和优化。此外,我们的开发重心现在将转移到0.13.x分支上的错误修复版本,以及在master分支上添加新特性。

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

  • 支持稀疏矩阵的高级索引和布尔比较

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

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

新特性#

scipy.integrate 改进#

N维数值积分#

已添加一个新函数 scipy.integrate.nquad,它提供N维积分功能,并且接口比 dblquadtplquad 更灵活。

dopri* 改进#

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

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 Level 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 高级索引#

压缩稀疏行和列稀疏矩阵类型现在支持使用布尔矩阵、切片和列表进行高级索引。因此,当 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 改进#

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

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 改进#

现在,所有方法中的分布都允许除了位置参数之外,使用关键字参数。

已添加函数 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 矩阵赋值的工作方式与为 ndarrays 赋值类似。

>>> 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 函数#

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

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

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

MATLAB 文件读写器的变更#

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

现在,尝试以 MATLAB 4 格式保存大于二维的数组会引发错误,而不是默默地将数组重塑为二维。

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

其他变更#

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

现在构建 SciPy 的*未发布*版本需要 Cython。从 Cython 源代码生成的 C 文件不再包含在 git 仓库中。但是,它们仍然包含在源代码发布中。

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

Scipy 不再能用 gfortran 4.1 编译(至少在 RH5 上是这样),这可能是因为该编译器版本对入口构造支持不佳。

作者#

此版本包含以下人员的工作(为本次发布至少贡献了一个补丁,姓名按字母顺序排列)

  • 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 人为本次发布做出了贡献。名字旁有“+”的人是首次贡献补丁。