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 支持任意维度的线性和最近邻插值,以及二维的样条插值。

在幂基和Bernstein多项式基中,分段多项式的更快实现已添加为 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”)格式内部表示,而不是使用转换为分子/分母格式。因此,所产生的滤波器的精度,特别是高阶滤波器,得到了显著提高。

Savitzky-Golay 滤波器通过新函数 scipy.signal.savgol_filterscipy.signal.savgol_coeffs 添加。

新函数 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 和其他 ufuncs 的参数时能正确工作。在较早的 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#

已弃用的函数 glmonewaycmedian 已从 scipy.stats 中移除。

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

scipy.interpolate#

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

方法 p.derivatives 已被移除。

其他更改#

作者#

  • 马克·亚伯拉莫维茨 +

  • 安德斯·贝克·博尔赫森 +

  • 文森特·阿雷-邦多克 +

  • Petr Baudis +

  • 马克斯·博林布罗克

  • 弗朗索瓦·布洛涅

  • 马修·布雷特

  • Lars Buitinck

  • Evgeni Burovski

  • CJ 凯里 +

  • 托马斯·A·卡斯韦尔 +

  • Pawel Chojnacki +

  • 菲利普·克劳德 +

  • Stefano Costa +

  • David Cournapeau

  • 大卫·梅嫩德斯·乌尔塔多 +

  • 马修·达尔蒂亚尔 +

  • Christoph Deil +

  • Jörg Dietrich +

  • endolith

  • 弗朗西斯科·德拉·佩尼亚 +

  • 本·弗兰茨戴尔 +

  • 吉姆·加里森 +

  • 安德烈·高尔

  • 克里斯托夫·戈尔克

  • Ralf Gommers

  • 罗伯特·大卫·格兰特

  • 亚历克斯·格里芬

  • 布莱克·格里菲斯

  • Yaroslav Halchenko

  • 安德烈亚斯·希尔博尔

  • 黄凯特

  • Gert-Ludwig Ingold

  • 詹姆斯·T·韦伯 +

  • 多罗塔·雅雷茨卡 +

  • 托德·詹宁斯 +

  • Thouis (Ray) Jones

  • 胡安·路易斯·卡诺·罗德里格斯

  • ktritz +

  • 雅克·克瓦姆 +

  • 埃里克·拉尔森 +

  • 贾斯汀·拉沃伊 +

  • 丹尼斯·拉萨尔德

  • Jussi Leinonen +

  • lemonlaug +

  • 蒂姆·莱斯利

  • 阿兰·勒夫罗伊 +

  • 乔治·刘易斯 +

  • 马克斯·林克 +

  • Brandon Liu +

  • Benny Malengier +

  • 马蒂亚斯·库默尔 +

  • Cimarron Mittelsteadt +

  • 埃里克·摩尔

  • 安德鲁·纳尔逊 +

  • 尼克拉斯·汉布钦 +

  • 乔尔·诺特曼 +

  • 克莱门斯·诺瓦克

  • Emanuele Olivetti +

  • Stefan Otte +

  • peb +

  • 约瑟夫·珀克托尔德

  • pjwerneck

  • poolio

  • Jérôme Roy +

  • 卡尔·桑德洛克 +

  • 安德鲁·谢兹纳克 +

  • Shauna +

  • 法布里斯·席尔瓦

  • 丹尼尔·B·史密斯

  • 帕特里克·斯纳普 +

  • 托马斯·斯普拉 +

  • 雅各布·史蒂文森

  • 朱利安·泰勒

  • Tomas Tomecek

  • 蔡理查

  • Jacob Vanderplas

  • Joris Vankerschaver +

  • 保罗·维尔塔宁

  • 沃伦·韦克瑟

共有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: scipy.linalg.eig 在给定 B 时不会归一化特征向量…

  • #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 在1维输入时崩溃 (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: 错误统计熵

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

  • #2861: scipy.stats.scoreatpercentile 对向量 per 失效

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

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

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

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

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

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

  • #2947: 失败: 测试 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: 稀疏矩阵的切片返回不正确的数据类型

  • #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: cdist 在 ‘sqeuclidean’ 度量下的性能问题

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

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

  • #3299: 内存泄漏: fmin_tnc

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

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

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

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

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

  • #3399: scipy.cluster.hierarchy.linkage 中的错误信息漏洞

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

  • #3412: 信号测试失败

  • #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: 莱斯分布:扩展到 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 形状

  • #3006: DOC: stats: 在文档字符串中添加了对数基数说明

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

  • #3008: 修复 mstats.kurtosistest,并为 skewtest/normaltest 增加测试覆盖

  • #3009: 小的 reST 拼写错误

  • #3010: 在API文档中添加 scipy.optimize.Result

  • #3012: 修正文档错误

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

  • #3064: 分箱统计

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

  • #3073: 带有单字符名义值的Arff读取器

  • #3074: 一些维护工作

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

  • #3083: 错误:如果没有找到区域,应返回0

  • #3085: BUG: 在IIR滤波器设计中使用zpk以提高精度

  • #3101: 稍微重构统计测试

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

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

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

  • #3126: 对 stats/distributions.py 进行 pep8 格式化

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

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

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

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

  • #3166: BUG: 使 curve_fit() 支持 array_like 输入。关闭 gh-3037。

  • #3170: 修复 numpy 版本检查

  • #3175: 使用 numpy sinc

  • #3177: 更新 numpy 版本警告,移除旧的 numeric 导入

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

  • #3179: DOC: 在文档中添加 BPoly

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

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

  • #3182: 使weave测试表现正常

  • #3183: ENH: 在 stats 模块中添加 k-样本 Anderson-Darling 检验

  • #3186: 修复 stats.scoreatpercentile

  • #3187: DOC: 使 curve_fit 的术语与 leastsq 相同

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

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

  • #3218: BUG: 积分: 修复了“vode”和…中的带状雅可比处理

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

  • #3223: 修复与numpy主分支的测试错误

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

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

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

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

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

  • #3240: DOC: 修复 BPoly docstring 中的 ReST 错误

  • #3241: RF: 在不写入的情况下检查文件对象的写属性

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

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

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

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

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

  • #3253: 修复稀疏减少方法对 axis=-1 和 -2 的支持

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

  • #3272: BUG: 稀疏矩阵: 修复 dia_matrix.setdiag 中的错误

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

  • #3286: DOC: 更新 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: DOC: 在 tf2zpk 中添加关于不同 ba 形式的注释

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

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

  • #3314: BUG: 修复在 Python3 下 scipy.io.mmread() 读取 gzipped 文件的问题

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

  • #3332: DOC: 清理 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: 稀疏: 重新缩进 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: 稀疏: 在需要时安全地将64位索引向下转换为intp

  • #3390: BUG: 非线性求解器不会被幸运的猜测所迷惑

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

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

  • #3393: BUG: sparse/compressed: 解决早期版本中 np.unique 的 bug…

  • #3394: BUG: 允许非根节点的 ClusterNode.pre_order() 方法

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

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

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

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

  • #3411: MAINT: 插值中的 Numpy 1.5 修复

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

  • #3414: TST: signal: 放宽过滤器测试中的一些错误容差….

  • #3415: MAINT: 工具: 自动关闭问题 + 发布PR列表…

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

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

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