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

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

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

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-spline 的导数和反导数的 B-spline。这些函数在基于类的 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 函数已移除#

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

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

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

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

主要的变化是,在numpy中的1D数组现在保存到MATLAB 5格式文件时变成了行向量(形状为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 上),可能是因为该编译器版本不支持入口构造。

作者#

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

  • 乔治·卡纳尔多·阿拉斯图伊

  • 汤姆·奥尔德克罗夫特 +

  • 马克斯·博林布罗克 +

  • 约瑟夫·乔恩·布克

  • 弗朗索瓦·布洛涅

  • 马修·布雷特

  • 克里斯蒂安·布罗德贝克 +

  • Per Brodtkorb +

  • 克里斯蒂安·布鲁弗 +

  • Lars Buitinck

  • Evgeni Burovski +

  • 蒂姆·塞拉

  • Lawrence Chan +

  • David Cournapeau

  • Dražen Lučanin +

  • 亚历山大·J·邓拉普 +

  • endolith

  • 安德烈·高尔 +

  • 克里斯托夫·戈尔克

  • Ralf Gommers

  • 亚历克斯·格里芬 +

  • Blake Griffith +

  • 查尔斯·哈里斯

  • 鲍勃·赫尔姆博德 +

  • 安德烈亚斯·希尔博尔

  • 黄凯婷 +

  • Oleksandr (Sasha) Huziy +

  • 格特-路德维希·英格尔德 +

  • Thouis (Ray) Jones

  • 胡安·路易斯·卡诺·罗德里格斯 +

  • 罗伯特·克恩

  • 安德烈亚斯·克洛克纳 +

  • Sytse Knypstra +

  • 古斯塔夫·拉尔森 +

  • 丹尼斯·拉萨尔德

  • 克里斯托弗·李

  • 蒂姆·莱斯利

  • 刘温迪 +

  • 克莱门斯·诺瓦克 +

  • Takuya Oshima +

  • 约瑟夫·珀克托尔德

  • 伊利亚·波洛苏欣 +

  • Przemek Porebski +

  • 史蒂夫·理查森

  • 布兰登·罗尔斯顿 +

  • Skipper Seabold

  • Fazlul Shahriar

  • Leo Singer +

  • Rohit Sivaprasad +

  • 丹尼尔·B·史密斯

  • 朱利安·泰勒

  • 路易斯·蒂博

  • Tomas Tomecek +

  • 约翰·特拉弗斯

  • 蔡理查 +

  • Jacob Vanderplas

  • 帕特里克·瓦林利

  • 保罗·维尔塔宁

  • 斯蒂芬·范·德·瓦特

  • 沃伦·韦克瑟

  • 佩德罗·韦尔内克 +

  • Nils Werner +

  • 迈克尔·维默尔 +

  • 内森·伍兹 +

  • Tony S. Yu +

共有65人参与了此次发布。名字后面带有“+”的人首次贡献了补丁。