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维积分功能,其接口比 dblquad
和 tplquad
更加灵活。
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 函数 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 花式索引#
压缩稀疏行和列稀疏矩阵类型现在支持使用布尔矩阵、切片和列表进行花式索引。因此,如果 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.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-spline 的导数和反导数的 B-spline。这些函数在基于类的 FITPACK 接口中也可用,分别为 UnivariateSpline.derivative
和 UnivariateSpline.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
现在有 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矩阵赋值现在的工作方式与为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
中移除了已弃用的关键字 xa
和 xb
#
自 0.11.0 版本起被弃用的关键字 xa
和 xb
已从 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 上),可能是因为该编译器版本不支持入口构造。