NumPy 1.4.0 发行说明#
这个小版本包括许多错误修复,以及一些新功能.它与 1.3.0 版本向后兼容.
亮点#
新的 datetime dtype 支持来处理数组中的日期
更快的导入时间
用于 ufunc 的扩展数组包装机制
新的邻域迭代器(仅限 C 级)
npymath 中类似 C99 的复数函数
新功能#
用于 ufunc 的扩展数组包装机制#
已向 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 和 polynomial .新的 polynomial 模块与 numpy 中当前的多项式支持不兼容,但非常类似于新的 chebyshev 模块.对大多数人来说,最显着的区别在于,系数是从低次幂到高次幂指定的,底层函数不适用于 Chebyshev 和 Polynomial 类作为参数,并且 Chebyshev 类和 Polynomial 类包含一个域.域之间的映射是线性替换,并且这两个类可以相互转换,例如,允许将一个域中的 Chebyshev 级数扩展为另一个域中的多项式.通常应使用新类而不是底层函数,后者提供给希望构建自己的类的人.
新模块不会自动导入到 numpy 命名空间中,必须使用 “ import numpy.polynomial ” 语句显式导入它们.
新的 C API#
以下 C 函数已添加到 C API:
PyArray_GetNDArrayCFeatureVersion:返回已加载的 numpy 的 API 版本.
PyArray_Correlate2- 类似于PyArray_Correlate,但实现了相关的常用定义.不交换输入,也不获取复数数组的共轭.
PyArray_NeighborhoodIterNew- 一个新的迭代器,用于迭代一个点的邻域,具有自动边界处理.它记录在 C-API 参考的迭代器部分中,您可以在 numpy.core 中的multiarray_test.c.src文件中找到一些示例.
新的 ufuncs#
以下 ufunc 已添加到 C API:
copysign- 返回第一个参数的值,并从第二个参数复制符号.
nextafter- 返回第一个参数朝向第二个参数的下一个可表示浮点值.
新的定义#
alpha 处理器现在已经定义,可在 numpy/npy_cpu.h 中使用.PARISC 处理器的检测失败问题已修复.定义如下:
NPY_CPU_HPPA: PARISC
NPY_CPU_ALPHA: Alpha
测试#
deprecated装饰器:此装饰器可用于避免在测试输出中出现混乱,同时 decorated test 有效地引发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,以便第三方可以重用这个库.有关更多信息,请参见 coremath 文档.
改进的集合操作#
在以前版本的 NumPy 中,如果输入数组包含重复的项,一些集合函数(intersect1d,setxor1d,setdiff1d 和 setmember1d)可能会返回不正确的结果.现在,这些函数对于包含重复项的输入数组可以正确工作.setmember1d 已被重命名为 in1d,因为随着更改为接受包含重复项的数组,它不再是集合操作,并且在概念类似于 Python 运算符“in”的按元素版本.所有这些函数现在都接受布尔关键字 assume_unique.默认情况下,这是 False,但如果已知输入数组不包含重复项,则可以设置为 True,这可以提高函数的执行速度.
改进#
numpy 导入明显更快(根据平台和计算机,从 20% 到 30%)
排序函数现在将 nan 排序到最后.
实数排序顺序是 [R, nan]
复数排序顺序是 [R + Rj, R + nanj, nan + Rj, nan + nanj]
具有相同 nan 位置的复数根据非 nan 部分(如果存在)进行排序.
类型比较函数已经与 nan 的新排序顺序保持一致.Searchsorted 现在可以使用包含 nan 值的排序数组.
复数除法更加耐溢出.
复数向下取整除法更加耐溢出.
弃用#
以下函数已被弃用:
correlate:它接受一个新的关键字参数 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-d 数组进行操作时,
numpy.max和其他函数仅接受axis=0,axis=-1和axis=None. 使用越界轴表明存在错误,因此 Numpy 现在针对这些情况引发错误.不再允许指定
axis > MAX_DIMS;Numpy 现在引发一个错误,而不是像axis=None那样表现.
内部更改#
在可用时使用 C99 复数函数#
现在保证 numpy 复数类型与 C99 复数类型 ABI 兼容(如果在平台上可用).此外,复数 ufunc 现在使用平台 C99 函数,而不是我们自己的函数.
拆分 multiarray 和 umath 源代码#
multiarray 和 umath 的源代码已拆分为单独的逻辑编译单元.这应该使源代码更适合于新来者.
单独编译#
默认情况下,multiarray(和 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