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 函数:
PyArray_GetNDArrayCFeatureVersion:返回加载的 numpy 的API版本。
PyArray_Correlate2 - 与 PyArray_Correlate 类似,但实现了相关性的通常定义。输入不交换,并且对复数数组采用共轭。
PyArray_NeighborhoodIterNew - 一个新的迭代器,用于迭代点的邻域,并具有自动边界处理功能。它记录在 C-API 参考的迭代器部分中,您可以在 numpy.core 的 multiarray_test.c.src 文件中找到一些示例。
新的 ufunc #
以下 ufunc 已添加到 C API 中:
copysign - 返回第一个参数的值以及从第二个参数复制的符号。
nextafter - 将第一个参数的下一个可表示浮点值返回到第二个参数。
新定义#
alpha 处理器现已在 numpy/npy_cpu.h 中定义并可用。 PARISC 处理器检测失败的问题已得到修复。定义是:
NPY_CPU_HPPA:巴黎
NPY_CPU_ALPHA:阿尔法
测试#
已弃用的装饰器:此装饰器可用于避免混乱的测试输出,同时测试装饰测试会有效地引发 DeprecationWarning。
assert_array_almost_equal_nulp:比较两个浮点值数组的新方法。使用此函数,如果两个值之间没有很多可表示的浮点值,则认为两个值很接近,因此当值波动很大时比assert_array_almost_equal更稳健。
assert_array_max_ulp:如果两个浮点值之间有超过 N 个可表示的数字,则引发断言。
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,这可以提高函数的执行速度。
改进#
numpy import 明显更快(20% 到 30%,具体取决于平台和计算机)
排序函数现在将 nan 排序到最后。
真正的排序顺序是 [R, nan]
复杂排序顺序为 [R + Rj, R + nanj, nan + Rj, nan + nanj]
具有相同 nan 位置的复数根据非 nan 部分(如果存在)进行排序。
类型比较函数已与 nan 的新排序顺序保持一致。 Searchsorted 现在适用于包含 nan 值的排序数组。
复杂的除法已经变得更能抵抗溢出。
复杂的楼层划分已变得更能抵抗溢出。
弃用#
以下函数已被弃用:
关联:它需要一个新的关键字参数 old_behavior。当 True(默认值)时,它返回与之前相同的结果。当为 False 时,计算常规相关性,并取复数数组的共轭。旧行为将在 NumPy 1.5 中删除,并在 1.4 中引发 DeprecationWarning。
unique1d:使用 unique 代替。 unique1d 在 1.4 中提出弃用警告,并将在 1.5 中删除。
intersect1d_nu:使用 intersect1d 代替。 intersect1d_nu 在 1.4 中提出弃用警告,并将在 1.5 中删除。
setmember1d:使用 in1d 代替。 setmember1d 在 1.4 中提出弃用警告,并将在 1.5 中删除。
以下引发错误:
当操作 0 维数组时,
numpy.max
其他函数仅接受axis=0
,axis=-1
和axis=None
。使用越界轴表示存在错误,因此 Numpy 现在会针对这些情况引发错误。不再允许指定; Numpy 现在会引发错误,而不是像 那样表现得类似。
axis > MAX_DIMS
axis=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