Numpy 1.4.0发行说明

这个小部分包括许多错误修复,以及一些新功能。它与1.3.0版本向后兼容。

集锦

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

  • 更快的导入时间

  • UFuncs扩展阵列封装机制

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

  • npymath中的类C99复合函数

新特点

UFuncs扩展阵列封装机制

安 __array_prepare__ 方法已添加到ndarray中,以提供子类更大的灵活性,以便与ufunc和类似ufunc的函数进行交互。已提供日历 __array_wrap__, 它允许子类为结果设置数组类型,并在离开ufunc时填充元数据(如maskedarray的实现中所示)。对于某些应用程序,需要提供检查并填充元数据 在途中 . __array_prepare__ 因此,在UFUNC初始化输出数组之后,但在计算结果并填充它之前调用。这样,可以在操作之前进行检查并引发错误,这些操作可能会就地修改数据。

自动检测正向不兼容

以前,如果扩展是针对numpy的版本n构建的,并且在numpy m<n的系统上使用,则导入_数组成功,这可能会导致崩溃,因为版本m在n中没有函数。从numpy 1.4.0开始,这将导致导入_数组失败,因此该错误将在早期被捕获。

新迭代器

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

新多项式支持

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

新模块不会自动导入到numpy名称空间中,它们必须与“import numpy.多项式”语句一起显式引入。

新的C API

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

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

  2. pyarray与pyarray相似,但实现了通常的相关定义。不交换输入,对复杂阵列采用共轭。

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

新UMULSS

以下UFUNC已添加到C API中:

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

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

新定义

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

  1. NPY-CPU-HPPA:巴黎

  2. npy-cpu-alpha:α

测试

  1. 不推荐使用的decorator:此decorator可用于避免在修饰测试有效地引发测试拒绝警告时混淆测试输出。

  2. 断言数组几乎等于两个浮点值数组的新方法。使用此函数,如果两个值之间没有太多可表示的浮点值,则认为这两个值是接近的,因此当值波动很大时,这两个值比断言数组几乎相等时更为健壮。

  3. 断言数组:如果两个浮点值之间有n个以上的可表示数字,则引发断言。

  4. 断言警告:如果可调用文件未生成适当类的警告,则在不更改警告状态的情况下引发断言错误。

重用数学

在1.3.0中,我们开始在npymath库中放置可移植的C数学例程,这样人们就可以使用这些例程编写可移植的扩展。不幸的是,无法轻松链接到此库:在1.4.0中,已向numpy.distutils添加了支持,以便第三方可以重用此库。有关详细信息,请参阅CoreMath文档。

改进的集合操作

在numpy的早期版本中,如果输入数组包含重复项,则某些集合函数(intersect1d、setxor1d、setdiff1d和setmember1d)可能返回不正确的结果。现在,对于具有重复项的输入数组,这些方法可以正常工作。setmember1d已重命名为in1d,与接受重复数组的更改一样,它不再是一个集合操作,概念上类似于python运算符“in”的elementwise版本。所有这些函数现在都接受布尔关键字“假定唯一”。默认情况下,这是错误的,但如果输入数组已知不包含重复项,则可以将其设置为真,这样可以提高函数的执行速度。

改进

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

  2. 排序函数现在将nan排序到末尾。

    • 真正的排序顺序是 [南,南]

    • 复杂排序顺序是 [R+RJ、R+NANJ、NAN+RJ、NAN+NANJ]

    如果存在具有相同NaN位置的复数,则按照非NaN部分进行排序。

  3. 类型比较函数与新的NAN排序顺序一致。SearchSorted现在可用于包含NaN值的已排序数组。

  4. 复杂的划分更能抵抗溢出。

  5. 复杂的楼层划分更能抵抗溢流。

贬抑

以下函数已弃用:

  1. 关联:它采用新的关键字参数旧的行为。如果为真(默认值),则返回与以前相同的结果。如果为假,则计算常规相关性,并对复杂阵列采用共轭。旧的行为将在numpy 1.5中删除,并在1.4中引发拒绝警告。

  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-D阵列上操作时, numpy.max 其他功能仅接受 axis=0axis=-1axis=None . 使用越界轴表示存在错误,因此numpy现在会对这些情况产生错误。

  2. 指定 axis > MAX_DIMS 不再允许;numpy现在引发错误,而不是表现得与for相似 axis=None .

内部变更

使用C99复杂功能(如果可用)

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

拆分多数组和umath源代码

multiarray和umath的源代码被分割成单独的逻辑编译单元。这将使源代码更适合新来者。

单独汇编

默认情况下,多数组(和umath)的每个文件都会像以前一样合并到一个文件中进行编译,但是如果npy_separate_compilation env变量设置为非负值,则会启用对每个文件的单独实验编译。这使得编译/调试周期在处理核心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