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 维积分功能,且比 dblquad 和 tplquad 具有更灵活的接口。
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, herk 和 her2k 现在已封装在 scipy.linalg 中。
矩阵函数#
根据 Nick Higham 及其合著者近期论文中的详细描述,实现或更新了几种矩阵函数算法。其中包括矩阵平方根 (sqrtm)、矩阵对数 (logm)、矩阵指数 (expm) 及其 Frechet 导数 (expm_frechet),以及分数矩阵幂 (fractional_matrix_power)。
scipy.optimize 改进#
置信域无约束最小化算法#
minimize 函数增加了两个用于无约束最小化的置信域求解器:dogleg 和 trust-ncg。
scipy.sparse 改进#
布尔比较和稀疏矩阵#
所有稀疏矩阵类型现在都支持布尔数据和布尔运算。两个稀疏矩阵 A 和 B 可以通过所有预期的方式进行比较,如 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.xlogy 和 scipy.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.read 和 scipy.io.wavfile.write 现在可以处理浮点型 WAV 文件。
scipy.interpolate 改进#
B 样条导数和原函数#
新增了 scipy.interpolate.splder 和 scipy.interpolate.splantider 函数,用于计算表示 B 样条导数和原函数的 B 样条。这些函数在基于类的 FITPACK 接口中也可作为 UnivariateSpline.derivative 和 UnivariateSpline.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 现在拥有 axis 和 ddof 参数。
弃用的功能#
expm2 和 expm3#
矩阵指数函数 scipy.linalg.expm2 和 scipy.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 中移除了弃用的关键字 xa 和 xb#
自 0.11.0 起弃用的关键字 xa 和 xb 已从 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 结构。