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*
改进#
现在可以通过 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 花式索引#
压缩稀疏行和列稀疏矩阵类型现在支持使用布尔矩阵、切片和列表进行花式索引。因此,如果 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.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 样条导数和反导数#
添加了用于计算表示 B 样条的导数和反导数的 B 样条的 scipy.interpolate.splder
和 scipy.interpolate.splantider
函数。这些函数也可在基于类的 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 矩阵赋值现在的工作方式与赋值到 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
中删除了已弃用的关键字 xa
和 xb
#
自 0.11.0 以来已弃用的关键字 xa
和 xb
已从 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 结构。