NumPy 1.4.0 发行说明#

此小版本包括许多错误修复以及一些新功能.它与 1.3.0 版本向后兼容.

亮点#

  • 新的 datetime dtype 支持,用于处理数组中的日期

  • 更快的导入时间

  • 用于 ufunc 的扩展数组包装机制

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

  • npymath 中类似 C99 的复数函数

新特性#

用于 ufunc 的扩展数组包装机制#

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

自动检测向前不兼容性#

以前,如果一个扩展是针对 NumPy 的版本 N 构建的,并在具有 NumPy M < N 的系统上使用,则 import_array 成功,这可能会导致崩溃,因为版本 M 没有版本 N 中的函数.从 NumPy 1.4.0 开始,这将导致 import_array 失败,因此可以及早发现错误.

新的迭代器#

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

新的多项式支持#

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

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

新 C API#

以下 C 函数已添加到 C API:

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

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

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

新的 ufuncs#

以下 ufunc 已添加到 C API:

  1. copysign - 返回第一个参数的值,其符号从第二个参数复制.

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

新定义#

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

  1. NPY_CPU_HPPA:PARISC

  2. NPY_CPU_ALPHA:Alpha

测试#

  1. deprecated 装饰器:此装饰器可用于避免在测试输出中产生混乱,同时通过装饰的测试有效地引发 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 的支持添加到 3rd 方,以便可以重用此库.有关更多信息,请参见 coremath 文档.

改进的集合运算#

在 NumPy 的先前版本中,某些集合函数 (intersect1d, setxor1d, setdiff1d 和 setmember1d) 如果输入数组包含重复项,则可能返回不正确的结果.现在,它们可以正确处理包含重复项的输入数组.setmember1d 已重命名为 in1d,因为随着更改为接受包含重复项的数组,它不再是集合运算,并且在概念上类似于 Python 运算符"in"的元素版本.所有这些函数现在都接受布尔关键字 assume_unique. 默认情况下为 False,但如果已知输入数组不包含重复项,则可以将其设置为 True,这可以提高函数的执行速度.

改进#

  1. numpy 导入明显更快(根据平台和计算机的不同,从 20% 到 30% 不等)

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

    • 实数排序顺序是 [R, nan]

    • 复数排序顺序是 [R + Rj, R + nanj, nan + Rj, nan + nanj]

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

  3. 类型比较函数已与新的 nans 排序顺序保持一致.Searchsorted 现在可以与包含 nan 值的已排序数组一起使用.

  4. 复数除法变得更能抵抗溢出.

  5. 复数向下取整除法变得更能抵抗溢出.

弃用#

以下函数已弃用:

  1. correlate:它接受一个新的关键字参数 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. 不再允许指定 axis > MAX_DIMS ;Numpy 现在会引发错误,而不是像 axis=None 那样表现.

内部更改#

在可用时使用 C99 复数函数#

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

拆分 multiarray 和 umath 源代码#

multiarray 和 umath 的源代码已拆分为单独的逻辑编译单元. 这应该使源代码更易于新手理解.

独立编译#

默认情况下,multiarray(和 umath)的每个文件都会合并为一个进行编译,就像以前一样,但是如果 NPY_SEPARATE_COMPILATION 环境变量设置为非负值,则会启用每个文件的实验性独立编译.这使得在处理 NumPy 核心时,编译/调试周期会快得多.

独立的 core math 库#

已添加的新函数:

  • npy_copysign

  • npy_nextafter

  • npy_cpack

  • npy_creal

  • npy_cimag

  • npy_cabs

  • npy_cexp

  • npy_clog

  • npy_cpow

  • npy_csqr

  • npy_ccos

  • npy_csin