SciPy 0.14.0 发行说明#

SciPy 0.14.0 是 8 个月辛勤工作的成果。它包含许多新功能、大量的错误修复、改进的测试覆盖率和更好的文档。此版本中进行了一些弃用和 API 更改,如下所述。鼓励所有用户升级到此版本,因为其中包含大量的错误修复和优化。此外,我们的开发重心现在将转移到 0.14.x 分支上的错误修复版本,以及在主分支上添加新功能。

此版本需要 Python 2.6、2.7 或 3.2-3.4 以及 NumPy 1.5.1 或更高版本。

新功能#

scipy.interpolate 改进#

添加了一个用于在规则网格上进行插值的新包装函数 scipy.interpolate.interpninterpn 支持任意维度的线性插值和最近邻插值,以及二维中的样条插值。

以幂和伯恩斯坦多项式为基的逐段多项式的更快实现已添加为 scipy.interpolate.PPolyscipy.interpolate.BPoly。新用户应使用这些来代替 scipy.interpolate.PiecewisePolynomial

scipy.interpolate.interp1d 现在接受非单调输入并对其进行排序。如果性能至关重要,可以使用新的 assume_sorted 关键字关闭排序。

已添加在 scipy.interpolate 中评估双变量样条导数的功能。

新的类 scipy.interpolate.Akima1DInterpolator 实现了由 H. Akima 设计的分段三次多项式插值方案。

已添加用于在任意维度的规则、不均匀间隔的网格上进行快速插值的功能,形式为 scipy.interpolate.RegularGridInterpolator

scipy.linalg 改进#

新函数 scipy.linalg.dft 计算离散傅里叶变换的矩阵。

添加了用于矩阵指数的条件数估计函数 scipy.linalg.expm_cond

scipy.optimize 改进#

添加了一组用于优化的基准测试,可以使用 optimize.bench() 运行。

scipy.optimize.curve_fit 现在可以通过 absolute_sigma 关键字进行更多可控的误差估计。

添加了对将自定义最小化方法传递给 optimize.minimize()optimize.minimize_scalar() 的支持,目前特别适用于将 optimize.basinhopping() 与自定义局部优化器例程结合使用。

scipy.stats 改进#

添加了一个具有多元正态随机变量功能的新类 scipy.stats.multivariate_normal

scipy.stats 分布框架上进行了大量工作。矩计算(主要是偏度和峰度)已修复并验证,所有示例现在都可运行,并且合并了许多针对各个分布的小精度和性能改进。

新函数 scipy.stats.anderson_ksamp 计算 k 个样本的 Anderson-Darling 检验,以检验 k 个样本是否来自同一父总体。

scipy.signal 改进#

scipy.signal.iirfilter 以及用于设计巴特沃斯、切比雪夫、椭圆和贝塞尔 IIR 滤波器的相关函数现在都在内部使用极零(“zpk”)格式,而不是使用转换为分子/分母格式的转换。因此,生成的滤波器的精度,尤其是高阶滤波器的精度,得到了显着提高。

使用新函数 scipy.signal.savgol_filterscipy.signal.savgol_coeffs 添加了 Savitzky-Golay 滤波器。

新函数 scipy.signal.vectorstrength 计算一组事件的向量强度,这是一种相位同步的度量。

scipy.special 改进#

添加了计算 Box-Cox 变换的函数 scipy.special.boxcoxscipy.special.boxcox1p

scipy.sparse 的改进#

  • CSR、CSC 和 DOK 索引速度的显著性能提升。

  • 当使用 Numpy >= 1.9 (将于 2014 年 MM 发布) 时,稀疏矩阵在作为 np.dotnp.multiply 和其他 ufunc 的参数时可以正常工作。在早期版本的 Numpy 和 Scipy 中,此类操作的结果是未定义的,并且通常是意料之外的。

  • 稀疏矩阵不再局限于 2^31 个非零元素。对于包含更多元素的矩阵,它们会自动切换到使用 64 位索引数据类型。假设稀疏矩阵使用 int32 作为索引数据类型编写的用户代码将继续工作,除了这些大型矩阵。处理大型矩阵的代码需要接受 int32 或 int64 索引。

已弃用的功能#

anneal#

全局最小化函数 scipy.optimize.anneal 已弃用。所有用户都应改用 scipy.optimize.basinhopping 函数。

scipy.stats#

randwcdfrandwppf 函数已弃用。所有用户都应改用特定分布的 rvs 方法。

概率计算别名 zprobfprobksprob 已弃用。请改用相应分布的 sf 方法或直接使用 special 函数。

scipy.interpolate#

PiecewisePolynomial 类已弃用。

向后不兼容的更改#

scipy.special.lpmn#

lpmn 不再接受复数值参数。添加了一个具有统一复数解析行为的新函数 clpmn,应该改用它。

scipy.sparse.linalg#

在广义特征值问题的情况下,特征向量被归一化为 2-范数中的单位向量,而不是遵循 LAPACK 归一化约定。

由于许可和安装问题,scipy.sparse.linalg 中已弃用的 UMFPACK 包装器已被删除。如果可用,scikits.umfpack 仍然在 spsolvefactorized 函数中透明地使用。否则,这些函数将改用 SuperLU。

scipy.stats#

已从 scipy.stats 中删除了已弃用的函数 glmonewaycmedian

stats.scoreatpercentile 现在返回一个数组,而不是百分位数列表。

scipy.interpolate#

计算单调分段插值的导数的 API 已更改:如果 p 是一个 PchipInterpolator 对象,p.derivative(der) 返回一个可调用对象,表示 p 的导数。对于就地导数,请使用 __call__ 方法的第二个参数:p(0.1, der=2) 计算 px=0.1 处的二阶导数。

已删除方法 p.derivatives

其他更改#

作者#

  • Marc Abramowitz +

  • Anders Bech Borchersen +

  • Vincent Arel-Bundock +

  • Petr Baudis +

  • Max Bolingbroke

  • François Boulogne

  • Matthew Brett

  • Lars Buitinck

  • Evgeni Burovski

  • CJ Carey +

  • Thomas A Caswell +

  • Pawel Chojnacki +

  • Phillip Cloud +

  • Stefano Costa +

  • David Cournapeau

  • David Menendez Hurtado +

  • Matthieu Dartiailh +

  • Christoph Deil +

  • Jörg Dietrich +

  • endolith

  • Francisco de la Peña +

  • Ben FrantzDale +

  • Jim Garrison +

  • André Gaul

  • Christoph Gohlke

  • Ralf Gommers

  • Robert David Grant

  • Alex Griffing

  • Blake Griffith

  • Yaroslav Halchenko

  • Andreas Hilboll

  • Kat Huang

  • Gert-Ludwig Ingold

  • James T. Webber +

  • Dorota Jarecka +

  • Todd Jennings +

  • Thouis (Ray) Jones

  • Juan Luis Cano Rodríguez

  • ktritz +

  • Jacques Kvam +

  • Eric Larson +

  • Justin Lavoie +

  • Denis Laxalde

  • Jussi Leinonen +

  • lemonlaug +

  • Tim Leslie

  • Alain Leufroy +

  • George Lewis +

  • Max Linke +

  • Brandon Liu +

  • Benny Malengier +

  • Matthias Kümmerer +

  • Cimarron Mittelsteadt +

  • Eric Moore

  • Andrew Nelson +

  • Niklas Hambüchen +

  • Joel Nothman +

  • Clemens Novak

  • Emanuele Olivetti +

  • Stefan Otte +

  • peb +

  • Josef Perktold

  • pjwerneck

  • poolio

  • Jérôme Roy +

  • Carl Sandrock +

  • Andrew Sczesnak +

  • Shauna +

  • Fabrice Silva

  • Daniel B. Smith

  • Patrick Snape +

  • Thomas Spura +

  • Jacob Stevenson

  • Julian Taylor

  • Tomas Tomecek

  • Richard Tsai

  • Jacob Vanderplas

  • Joris Vankerschaver +

  • Pauli Virtanen

  • Warren Weckesser

共有 80 人为本次发布做出了贡献。名字旁边带有“+”号的人是第一次贡献补丁。此名称列表是自动生成的,可能并不完全完整。

已关闭的问题#

  • #1325: 在 scipy.cluster.hierarchy 中向 dendrogram 函数添加自定义轴关键字……

  • #1437: 负整数的错误 Pochhammer 符号 (Trac #910)

  • #1555: scipy.io.netcdf 泄漏文件描述符 (Trac #1028)

  • #1569: 使用 numpy.multiply() 进行逐元素乘法时,稀疏矩阵失败……

  • #1833: 稀疏矩阵被限制为 2^32 个非零元素 (Trac #1307)

  • #1834: 如果给定 B,scipy.linalg.eig 不会归一化特征向量……

  • #1866: invgamma 的统计信息 (Trac #1340)

  • #1886: stats.zipf 浮点警告 (Trac #1361)

  • #1887: 统计连续分布 - 浮点警告 (Trac...)

  • #1897: scoreatpercentile() 不处理空列表输入 (Trac #1372)

  • #1918: splint 返回不正确的结果 (Trac #1393)

  • #1949: kurtosistest 在 mstats 中因类型错误而失败 (Trac #1424)

  • #2092: scipy.test 留下 darwin27compiled_catalog、cpp 和 so 文件……

  • #2106: stats ENH:分布文档字符串中的形状参数 (Trac...)

  • #2123: 二元 ufunc 中稀疏矩阵的错误行为 (Trac #1598)

  • #2152: 修复 Python 3 上 gzip 的 mmio/fromfile (Trac #1627)

  • #2164: stats.rice.pdf(x, 0) 返回 nan (Trac #1639)

  • #2169: scipy.optimize.fmin_bfgs 不处理有边界的函数……

  • #2177: scipy.cluster.hierarchy.ClusterNode.pre_order 返回 IndexError……

  • #2179: coo.todense() 段错误 (Trac #1654)

  • #2185: scipy.ndimage.gaussian_filter*() 的精度受限 (Trac #1660)

  • #2186: scipy.stats.mstats.kurtosistest 在 1d 输入时崩溃 (Trac #1661)

  • #2238: hypergeom.cdf 的负 p 值 (Trac #1719)

  • #2283: 插值例程中的升序 (Trac #1764)

  • #2288: mstats.kurtosistest 错误地转换为浮点数,并且失败……

  • #2396: |z| > 1 时 lpmn 的错误结果 (Trac #1877)

  • #2398: ss2tf 返回的 num 为 2D 数组而不是 1D 数组 (Trac #1879)

  • #2406: linkage 不接受 Unicode 字符串作为方法名称 (Trac #1887)

  • #2443: IIR 滤波器设计不应在内部转换为 tf 表示

  • #2572: splu 的类方法 solve 返回对象损坏或错误……

  • #2667: stats 无限循环?

  • #2671: .stats.hypergeom 文档中关于 pmf 的注释错误

  • #2691: BUG scipy.linalg.lapack:potrf/ptroi 解释其 ‘lower’……

  • #2721: 允许在 scipy.sparse 切片中使用省略号

  • #2741: stats:弃用并删除特殊函数的别名

  • #2742: stats 向 rice 分布添加 rvs

  • #2765: bugs stats entropy

  • #2832: 当未找到峰值时,argrelextrema 返回 2 个空数组的元组…

  • #2861: scipy.stats.scoreatpercentile 对于向量 per 损坏

  • #2891: COBYLA 在违反约束时成功终止

  • #2919: 当前 master 分支上的测试失败

  • #2922: ndimage.percentile_filter 忽略多维数据的 origin 参数…

  • #2938: 由于 __numpy_ufunc__,稀疏/密集矩阵原地操作失败

  • #2944: MacPorts 构建产生 40Mb 的构建警告

  • #2945: FAIL: test_random_complex (test_basic.TestDet)

  • #2947: FAIL: 测试 savgol_filter() 的一些琐碎的边界情况

  • #2953: Scipy Delaunay 三角剖分未定向

  • #2971: scipy.stats.mstats.winsorize 文档错误

  • #2980: 运行看起来完全有效的示例时出现问题

  • #2996: rv_discrete 的熵不正确?!

  • #2998: 修复 numpy 版本比较

  • #3002: python setup.py install 失败

  • #3014: stats.fisher_exact 中的错误

  • #3030: 当使用 scipy.stats.distribution.entropy 计算相对熵时…

  • #3037: 当输入…时,scipy.optimize.curve_fit 导致意外行为

  • #3047: mstats.ttest_rel axis=None,需要掩码数组

  • #3059: BUG:稀疏矩阵的切片返回不正确的 dtype

  • #3063: binned_statistics 中的 range 关键字不正确

  • #3067: cumtrapz 未按预期工作

  • #3069: sinc

  • #3086: ‘stats’ 和 ‘mstats’ 之间的标准误差计算不一致

  • #3094: 在 scipy.misc 中添加一个 perm 函数,并增强…

  • #3111: scipy.sparse.[hv]stack 不再遵循 dtype 参数

  • #3172: optimize.curve_fit 使用与 optimize.leastsq 不同的命名法

  • #3196: scipy.stats.mstats.gmean 实际上不接受 dtype

  • #3212: csr_matrix 的点积导致段错误

  • #3227: 当初始猜测正确时,broyden1 中出现 ZeroDivisionError

  • #3238: lbfgsb 输出未被 disp=0 抑制

  • #3249: 稀疏矩阵 min/max/etc 不支持 axis=-1

  • #3251: ‘sqeuclidean’ 度量的 cdist 性能问题

  • #3279: logm 对于奇异矩阵失败

  • #3285: signal.chirp(method='hyp') 不允许双曲线向上扫描

  • #3299: 内存泄漏:fmin_tnc

  • #3330: 当前 master 分支上的测试失败

  • #3345: scipy 和/或 numpy 的更改导致另一个库中的测试失败…

  • #3363: splu 不适用于非向量输入

  • #3385: expit 不能很好地处理大参数

  • #3395: specfun.f 无法使用 MinGW 编译

  • #3399: scipy.cluster.hierarchy.linkage 中的错误消息错误

  • #3404: interpolate._ppoly 无法使用 MinGW 构建

  • #3412: signal 中的测试失败

  • #3466: `scipy.sparse.csgraph.shortest_path` 不适用于 `scipy.sparse.csr_matrix``lil_matrix`

拉取请求#

  • #442: ENH: sparse: 启用 64 位索引数组和 nnz > 2**31

  • #2766: DOC: 删除 doc/seps/technology-preview.rst

  • #2772: TST: stats: 为 stats.wilcoxon 添加回归测试。关闭…

  • #2778: 清理 stats._support,关闭统计审查问题

  • #2792: BUG io: 修复 netcdf 变量的文件描述符关闭

  • #2847: Rice 分布:扩展到 b=0,添加显式 rvs 方法。

  • #2878: [stats] 修复 dweibull 分布的更高阶矩的公式

  • #2904: ENH: zipf 分布的矩

  • #2907: ENH: 为 Travis 运行添加 coveralls.io 的覆盖率信息。

  • #2932: BUG+TST: dia_matrix 的 setdiag 实现 (关闭 #2931)…

  • #2942: Eclipse PyDev 静态代码分析指出的一些杂项修复

  • #2946: ENH: 允许 interp1d 中的非单调输入

  • #2986: BUG: runtests:运行测试时从根目录更改目录

  • #2987: DOC: linalg:不要推荐 np.linalg.norm

  • #2992: ENH: 为 dijkstra 计算添加 “limit” 参数

  • #2995: ENH: 使用 int shape

  • #3006: DOC: stats:在 docstring 中添加对数底数注释

  • #3007: DEP: stats:弃用 randwppf 和 randwcdf

  • #3008: 修复 mstats.kurtosistest,以及 skewtest/normaltest 的测试覆盖率

  • #3009: 轻微的 reST 拼写错误

  • #3010: 将 scipy.optimize.Result 添加到 API 文档

  • #3012: 更正文档错误

  • #3052: PEP-8 一致性改进

  • #3064: 分箱统计

  • #3068: 修复问题 #3067,修复当…时引发异常的 cumptrapz

  • #3073: 具有 1 个字符的名义值的 Arff 读取器

  • #3074: 一些维护工作

  • #3080: 审查和清理所有 Box-Cox 函数

  • #3083: Bug:如果未找到区域,则应返回 0

  • #3085: BUG:在 IIR 滤波器设计中使用 zpk 以提高准确性

  • #3101: 重构统计测试

  • #3112: ENH: 在 1D 中实现 Akima 插值

  • #3123: MAINT: 一种从切片创建范围的更简单方法

  • #3124: 文件对象支持 imread 和 imsave

  • #3126: pep8ify stats/distributions.py

  • #3134: MAINT: 将 distributions.py 拆分为三个文件

  • #3138: 清理离散分布的测试

  • #3155: special:处理 pdtr、pdtrc 和 pdtrik 中 lambda=0 的边界情况

  • #3156: 将 optimize.Result 重命名为 OptimizeResult

  • #3166: BUG: 使 curve_fit() 适用于类似数组的输入。关闭 gh-3037。

  • #3170: 修复 numpy 版本检查

  • #3175: 使用 numpy sinc

  • #3177: 更新 numpy 版本警告,删除 oldnumeric 导入

  • #3178: DEP: 删除已弃用的 umfpack 包装器。关闭 gh-3002。

  • #3179: DOC: 将 BPoly 添加到文档

  • #3180: 运行 stats.test() 时抑制警告

  • #3181: 修改了 mstats 中的 sem 函数以匹配 stats

  • #3182: 使 weave 测试正常工作

  • #3183: ENH: 将 k 样本 Anderson-Darling 测试添加到 stats 模块

  • #3186: 修复 stats.scoreatpercentile

  • #3187: DOC: 使 curve_fit 命名法与 leastsq 相同

  • #3201: 向 dendrogram 函数添加了 axis 关键字

  • #3207: 使 stats.distributions 文档字符串中的文档字符串示例可运行

  • #3218: BUG: integrate: 修复 “vode” 和…中的带状雅可比矩阵处理

  • #3222: BUG: 限制 special.nctdtr 中的输入范围

  • #3223: 修复 numpy master 中的测试错误

  • #3224: 修复 sparsetools 中的 int32 溢出

  • #3228: DOC: tf2ss zpk2ss 注释控制器规范形式

  • #3234: 将 “另请参阅” 链接和示例图添加到滤波器设计 *ord 函数

  • #3235: 更新了 buttord 函数,使其与其他函数保持一致…

  • #3239: 修正 pchip 插值的文档

  • #3240: 文档:修复 BPoly 文档字符串中的 ReST 错误

  • #3241: RF:检查文件对象的写入属性,而不进行写入

  • #3243: stats 模块中的一些维护工作

  • #3245: BUG/ENH: stats:使冻结分布持有单独的实例

  • #3247: ENH:函数返回一些稀疏矩阵中每行/列的非零元素数量

  • #3248: ENH:更高效的带轴的稀疏矩阵最小值/最大值

  • #3252: 快速平方欧几里得距离

  • #3253: FIX:支持稀疏归约方法的 axis=-1 和 -2

  • #3254: TST:稀疏矩阵操作的非规范输入的测试

  • #3272: BUG:sparse:修复 dia_matrix.setdiag 中的错误

  • #3278: 在运行 paver sdist 时也生成 tar.xz 文件

  • #3286: 文档:更新 0.14.0 发行说明。

  • #3289: TST:移除测试中不安全的 mktemp 使用

  • #3292: MAINT:修复 stats.distributions.__all__ 的向后不兼容更改

  • #3293: ENH: signal:允许在 “hyperbolic” 中进行频率向上扫描…

  • #3302: ENH:为 stats.mstats.gmean 和 stats.mstats.hmean 添加 dtype 参数

  • #3307: 文档:在 tf2zpk 中添加关于不同 ba 形式的注释

  • #3309: 增强 scipy.stats.mstats.winsorize 的文档

  • #3310: 文档:在 mmio 文档字符串中澄清矩阵与数组

  • #3314: BUG:修复 Python 3 下 scipy.io.mmread() 读取 gzip 文件的问题

  • #3323: ENH:在任意维度上对规则网格进行高效插值

  • #3332: 文档:清理 scipy.special 文档

  • #3335: ENH:提高 nanmedian 性能

  • #3347: BUG:修复 stats.fisher_exact 中 np.max 的使用

  • #3356: ENH:sparse:通过 Cython 加速 LIL 索引 + 赋值

  • #3357: 修复 “imresize 不适用于 size = int” 的问题

  • #3358: MAINT:将 AkimaInterpolator 重命名为 Akima1DInterpolator

  • #3366: WHT:sparse:重新缩进 dsolve/*.c *.h

  • #3367: BUG:sparse/dsolve:修复 superlu 中密集矩阵的 fortran 顺序错误…

  • #3369: ENH minimize, minimize_scalar:添加对用户提供的支持…

  • #3371: scipy.stats.sigmaclip 没有出现在 html 文档中。

  • #3373: BUG:sparse/dsolve:检测 superlu 中无效的 LAPACK 参数…

  • #3375: ENH:sparse/dsolve:使 splu 和 spilu 的 L 和 U 因子…

  • #3377: MAINT:使 travis 构建针对 Numpy 1.5 的一个目标

  • #3378: MAINT:fftpack:在一些测试中删除 'import * 的使用…

  • #3381: MAINT:将 np.isinf(x) & (x>0) 替换为 np.isposinf(x) 以避免…

  • #3383: MAINT:在没有 float96 的平台上跳过 float96 测试

  • #3384: MAINT:将 pyflakes 添加到 Travis-CI

  • #3386: BUG:expit 的稳定评估

  • #3388: BUG:SuperLU:修复 dlamch 的缺失声明

  • #3389: BUG:sparse:在需要时将 64 位索引安全地向下转换为 intp

  • #3390: BUG:非线性求解器不会被幸运的猜测混淆

  • #3391: TST:修复由于 np.matrix.sum() 中使用 axis=-1,-2 导致的稀疏测试错误。

  • #3392: BUG:sparse/lil:修复融合类型查找中的 Cython 错误

  • #3393: BUG:sparse/compressed:解决早期 np.unique 中的错误…

  • #3394: BUG:允许 ClusterNode.pre_order() 用于非根节点

  • #3400: BUG:cluster.linkage ValueError 拼写错误

  • #3402: BUG:special:在 specfun.f 中,将 CMPLX 的使用替换为 DCMPLX,…

  • #3408: MAINT:sparse:Numpy 1.5 兼容性修复

  • #3410: MAINT:interpolate:修复 _ppoly 中的 blas 定义

  • #3411: MAINT:interpolate 中的 Numpy 1.5 修复

  • #3413: 修复旧版本 numpy 的更多测试问题

  • #3414: TST:signal:放松滤波器测试中的一些误差容限…。

  • #3415: MAINT:tools:自动关闭问题 + 发布版本的 PR 列表…

  • #3440: MAINT:手动包装 sparsetools,而不是通过 SWIG

  • #3460: TST:以二进制模式打开图像文件

  • #3467: BUG:修复 csgraph.shortest_path 中的验证