NumPy 1.4.0 发行说明#

这个次要版本包括许多错误修复以及一些新功能。它向后兼容 1.3.0 版本。

强调

  • 新的日期时间数据类型支持处理数组中的日期

  • 更快的导入时间

  • ufunc 的扩展数组包装机制

  • 新邻域迭代器(仅限 C 级)

  • npymath 中类似 C99 的复杂函数

新功能

ufuncs 的扩展数组包装机制#

ndarray 中添加了 __array_prepare__ 方法,为子类提供更大的灵活性来与 ufunc 和类似 ufunc 的函数进行交互。 ndarray 已经提供了 __array_wrap__,它允许子类设置结果的数组类型并在 ufunc 之外填充元数据(如 MaskedArray 的实现中所示)。对于某些应用程序,有必要.因此,在 ufunc 初始化输出数组之后、计算结果并填充它之前调用 __array_prepare__ 。这样,可以在可能修改数据的操作之前进行检查并引发错误。

自动检测前向不兼容性#

以前,如果针对 NumPy 版本 N 构建扩展,并在 NumPy M < N 的系统上使用,则 import_array 会成功,这可能会导致崩溃,因为版本 M 没有 N 中的函数。从 NumPy 1.4 开始.0,这将导致 import_array 失败,因此错误将被尽早捕获。

新迭代器#

C API 中添加了新的邻域迭代器。它可用于迭代数组邻域中的项目,并且可以自动处理边界条件。可以使用零和一填充,以及任意常数值、镜像和圆形填充。

新的多项式支持#

添加了新模块 chebyshev 和多项式。新的多项式模块与 numpy 中当前的多项式支持不兼容,但很像新的 chebyshev 模块。对于大多数人来说,最明显的区别是系数是从低到高的幂指定的,低级函数不适用于切比雪夫和多项式类作为参数,并且切比雪夫和多项式类包含一个域。域之间的映射是一种线性替换,并且两个类可以相互转换,例如,允许将一个域中的切比雪夫级数展开为另一个域中的多项式。通常应该使用新类而不是低级函数,后者是为那些希望构建自己的类的人提供的。

新模块不会自动导入到 numpy 命名空间中,必须使用“import numpy.polynomial”语句显式导入它们。

新的 C API #

C API 中添加了以下 C 函数:

  1. PyArray_GetNDArrayCFeatureVersion:返回加载的 numpy 的API版本。

  2. PyArray_Correlate2 - 与 PyArray_Correlate 类似,但实现了相关性的通常定义。输入不交换,并且对复数数组采用共轭。

  3. PyArray_NeighborhoodIterNew - 一个新的迭代器,用于迭代点的邻域,并具有自动边界处理功能。它记录在 C-API 参考的迭代器部分中,您可以在 numpy.core 的 multiarray_test.c.src 文件中找到一些示例。

新的 ufunc #

以下 ufunc 已添加到 C API 中:

  1. copysign - 返回第一个参数的值以及从第二个参数复制的符号。

  2. nextafter - 将第一个参数的下一个可表示浮点值返回到第二个参数。

新定义#

alpha 处理器现已在 numpy/npy_cpu.h 中定义并可用。 PARISC 处理器检测失败的问题已得到修复。定义是:

  1. NPY_CPU_HPPA:巴黎

  2. NPY_CPU_ALPHA:阿尔法

测试#

  1. 已弃用的装饰器:此装饰器可用于避免混乱的测试输出,同时测试装饰测试会有效地引发 DeprecationWarning。

  2. assert_array_almost_equal_nulp:比较两个浮点值数组的新方法。使用此函数,如果两个值之间没有很多可表示的浮点值,则认为两个值很接近,因此当值波动很大时比assert_array_almost_equal更稳健。

  3. assert_array_max_ulp:如果两个浮点值之间有超过 N 个可表示的数字,则引发断言。

  4. assert_warns:如果可调用对象没有生成适当类的警告,则引发 AssertionError,而不改变警告状态。

重用 npymath #

在 1.3.0 中,我们开始将可移植的 C 数学例程放入 npymath 库中,以便人们可以使用它们来编写可移植的扩展。不幸的是,无法轻松链接到该库:在 1.4.0 中,已添加对 numpy.distutils 的支持,以便第 3 方可以重用该库。有关更多信息,请参阅 coremath 文档。

改进的集合操作#

在 NumPy 的早期版本中,如果输入数组包含重复项,某些集合函数(intersect1d、setxor1d、setdiff1d 和 setmember1d)可能会返回不正确的结果。这些现在对于具有重复项的输入数组可以正常工作。 setmember1d 已重命名为 in1d,因为更改为接受具有重复项的数组,它不再是集合操作,并且在概念上类似于 Python 运算符“in”的元素版本。所有这些函数现在都接受布尔关键字假设_unique。默认情况下为 False,但如果已知输入数组不包含重复项,则可以设置为 True,这可以提高函数的执行速度。

改进#

  1. numpy import 明显更快(20% 到 30%,具体取决于平台和计算机)

  2. 排序函数现在将 nan 排序到最后。

    • 真正的排序顺序是 [R, nan]

    • 复杂排序顺序为 [R + Rj, R + nanj, nan + Rj, nan + nanj]

    具有相同 nan 位置的复数根据非 nan 部分(如果存在)进行排序。

  3. 类型比较函数已与 nan 的新排序顺序保持一致。 Searchsorted 现在适用于包含 nan 值的排序数组。

  4. 复杂的除法已经变得更能抵抗溢出。

  5. 复杂的楼层划分已变得更能抵抗溢出。

弃用#

以下函数已被弃用:

  1. 关联:它需要一个新的关键字参数 old_behavior。当 True(默认值)时,它返回与之前相同的结果。当为 False 时,计算常规相关性,并取复数数组的共轭。旧行为将在 NumPy 1.5 中删除,并在 1.4 中引发 DeprecationWarning。

  2. unique1d:使用 unique 代替。 unique1d 在 1.4 中提出弃用警告,并将在 1.5 中删除。

  3. intersect1d_nu:使用 intersect1d 代替。 intersect1d_nu 在 1.4 中提出弃用警告,并将在 1.5 中删除。

  4. setmember1d:使用 in1d 代替。 setmember1d 在 1.4 中提出弃用警告,并将在 1.5 中删除。

以下引发错误:

  1. 当操作 0 维数组时,numpy.max其他函数仅接受axis=0,axis=-1axis=None。使用越界轴表示存在错误,因此 Numpy 现在会针对这些情况引发错误。

  2. 不再允许指定; Numpy 现在会引发错误,而不是像 那样表现得类似。axis > MAX_DIMSaxis=None

内部变化#

可用时使用 C99 复杂函数#

如果平台上可用,现在保证 numpy 复杂类型与 C99 复杂类型 ABI 兼容。此外,复杂的 ufunc 现在使用平台 C99 函数而不是我们自己的函数。

分割多数组和umath源代码#

multiarray 和 umath 的源代码已被分成单独的逻辑编译单元。这应该使源代码更适合新手。

单独编译#

默认情况下,多数组(和 umath)的每个文件都会像之前的情况一样合并为一个文件进行编译,但如果 NPY_SEPARATE_COMPILATION 环境变量设置为非负值,则将启用每个文件的实验性单独编译。这使得在核心 numpy 上工作时编译/调试周期更快。

独立的核心数学库#

已添加的新功能:

  • npy_copysign

  • npy_nextafter

  • npy_cpack

  • npy_creal

  • npy_cimag

  • npy_cabs

  • npy_cexp

  • npy_clog

  • npy_cpow

  • npy_csqr

  • npy_ccos

  • npy_csin