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维积分功能,并且接口比 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 Level 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 高级索引#
压缩稀疏行和列稀疏矩阵类型现在支持使用布尔矩阵、切片和列表进行高级索引。因此,当 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样条导数和反导数的B样条。这些函数在基于类的 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
函数#
在 SciPy 0.11.0 中已弃用的 misc.radon
函数已移除。用户可以在 scikit-image 中找到功能更全面的 radon
函数。
从 stats.distributions
中移除了已弃用的关键字 xa
和 xb
#
关键字 xa
和 xb
自 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 上是这样),这可能是因为该编译器版本对入口构造支持不佳。