SciPy 0.13.0 发行说明#

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

此版本需要 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 函数 symmsyrksyr2khemmherkher2k 现在封装在 scipy.linalg 中。

矩阵函数#

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

scipy.optimize 改进#

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

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

scipy.sparse 改进#

布尔比较和稀疏矩阵#

所有稀疏矩阵类型现在都支持布尔数据和布尔运算。两个稀疏矩阵 AB 可以以所有预期的方式进行比较,例如 A < BA >= BA != 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 改进#

现在可以通过 vertices 属性访问 ConvexHull 的顶点,它在 2-D 中给出正确的方向。

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 样条导数和反导数#

添加了用于计算表示 B 样条的导数和反导数的 B 样条的 scipy.interpolate.splderscipy.interpolate.splantider 函数。这些函数也可在基于类的 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 矩阵赋值现在的工作方式与赋值到 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 函数#

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

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

自 0.11.0 以来已弃用的关键字 xaxb 已从 scipy.stats 中的分布中删除。

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

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

尝试以 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 人为本版本做出了贡献。名字后面带有 “+” 的人是首次贡献补丁。