Numpy 1.7.0发行说明

这个版本包括几个新特性,以及许多错误修复和重构。它支持python 2.4-2.7和3.1-3.3,是最后一个支持python 2.4-2.5的版本。

集锦

  • where= ufuncs的参数(允许使用布尔数组选择应在何处进行计算)

  • vectorize 改进(添加了“排除”和“缓存”关键字、常规清理和错误修复)

  • numpy.random.choice (随机样本生成函数)

兼容性说明

在未来版本的numpy中,函数np.diag、np.对角线和ndarrays的对角线方法将返回原始数组的视图,而不是像现在那样生成副本。如果您对这些函数中的任何一个返回的数组进行写操作,这会有所不同。为了方便这种转换,如果numpy 1.7检测到您可能试图写入这样的数组,它将生成一个FutureWarning。有关详细信息,请参阅np.对角线文档。

与上面的np.对角线类似,在未来版本的numpy中,通过字段名列表索引记录数组将返回到原始数组的视图,而不是像现在那样生成副本。与np.对角线一样,如果numpy 1.7检测到您可能试图写入这样的数组,它将生成一个FutureWarning。有关详细信息,请参阅数组索引文档。

在未来版本的numpy中,ufunc out=参数的默认强制转换规则将从“不安全”更改为“同类”。(这也适用于就地操作,如a+=b,相当于np.add(a,b,out=a)。)大多数违反“同类”规则的用法很可能是错误,因此此更改可能暴露依赖于numpy的项目中以前未检测到的错误。在这个版本的numpy中,这样的用法将继续成功,但会引发一个拒绝警告。

全数组布尔索引已优化为使用不同的优化代码路径。此代码路径应该产生相同的结果,但是对于您的代码的任何更改的反馈都将表示感谢。

尝试写入只读数组(其中 arr.flags.writeable 设置为 False )根据采用的代码路径,用于不一致地引发runtimeerror、valueerror或typeerror。现在它始终会引发ValueError。

与以前版本的numpy相比,<ufunc>.reduce函数以不同的顺序评估某些减少,通常提供更高的性能。由于浮点运算的性质,这可能会细微地改变一些结果,就像将numpy链接到不同的blas实现(如mkl can)一样。

如果从1.5升级,那么通常在1.6和1.7中会添加大量代码,并且会更改一些代码路径,特别是在类型解析和通用函数缓冲迭代方面。这可能会对您的代码产生影响,尤其是如果您过去依赖于意外行为。

新特点

reduction ufuncs generalize axis=参数

任何ufunc.reduce函数调用以及诸如sum、prod、any、all、max和min等其他缩减都支持选择要缩减的轴子集的能力。以前,可以说“轴=无”,表示所有轴或轴=选择单个轴。现在,也可以说轴=(,),以选择要缩减的轴列表。

reduction ufuncs new keepdinms=参数

有一个新的keepdims=参数,如果设置为true,则不会丢弃减速轴,而是将其设置为大小为1。设置此选项后,还原结果将正确广播到还原后的原始操作数。

日期时间支持

注解

日期时间API是 实验的 在1.7.0中,可能会在未来版本的numpy中发生更改。

与numpy 1.6相比,datetime64有很多修复和增强:

  • 解析器非常严格地只接受ISO 8601日期,并有一些方便的扩展

  • 单位之间正确转换

  • 日期时间算法工作正常

  • 工作日功能(允许在只有一周中特定日期有效的上下文中使用日期时间)

注释 doc/source/reference/arrays.datetime.rst (也可在在线文档中找到,网址为 arrays.datetime.html )更多细节请咨询。

用于打印数组的自定义格式化程序

看到新的 formatter 的参数 numpy.set_printoptions 功能。

新函数numpy.random.choice

已经添加了一个通用的采样函数,它将从类似的给定数组生成样本。样品可以有替换或无替换,并且具有均匀或给定的非均匀概率。

新函数isclose

返回一个布尔数组,其中两个数组在一个公差内按元素方向相等。可以指定相对公差和绝对公差。

多项式包中的初步多维支持

集成和微分函数中添加了轴关键字,评估函数中添加了张量关键字。这些添加允许在这些函数中使用多维系数数组。在网格或点集上对二维和三维系数阵列进行评估的新函数与可用于拟合的二维和三维伪范德蒙矩阵相加。

填充n级阵列的能力

添加了一个包含用于填充n维数组的函数的PAD模块。各种私有填充函数作为公共“pad”函数的选项公开。例子::

pad(a, 5, mode='mean')

当前模式为 constantedgelinear_rampmaximummeanmedianminimumreflectsymmetricwrap<function> .

搜索排序的新参数

函数searchSorted现在接受一个“sorter”参数,该参数是对要搜索的数组进行排序的排列数组。

构建系统

添加了对AARCH64体系结构的实验支持。

计算机辅助编程接口

新功能 PyArray_RequireWriteable 提供一个一致的接口来检查数组的可写性——任何与可写标志不为true的数组一起工作的C代码都应该确保在写入之前调用这个函数。

添加了Numpy C样式指南 (doc/C_STYLE_GUIDE.rst.txt

变化

一般

concatenate函数尝试匹配其输入数组的布局。以前,布局没有遵循任何特定的原因,并且以不希望的方式依赖于选择用于连接的特定轴。还修复了一个bug,它静默地允许超出界限的轴参数。

UFUNC的逻辑或、逻辑和和逻辑现在不遵循Python对对象数组的行为,而是尝试对对象调用方法。例如,表达式(3和“test”)生成字符串“test”,现在np.logical_和(np.array(3,'o'),np.array(“test”,'o))也生成“test”。

这个 .base ndarrays上的属性,用于视图以确保拥有内存的底层数组不会过早释放,现在当您有视图时,它会折叠引用。例如::

a = np.arange(10)
b = a[1:]
c = b[1:]

1.6号, c.basebc.base.basea . 1.7号, c.basea .

增强软件的向后兼容性,该软件依赖于 .base ,我们只“跳过”与新创建的视图类型完全相同的对象。如果你使用 ndarray 子类。例如,如果我们有 ndarraymatrix 所有视图都位于同一原始视图上的对象 ndarray ::

a = np.arange(10)
b = np.asmatrix(a)
c = b[0, 1:]
d = c[0, 1:]

然后 d.baseb . 这是因为 d 是一个 matrix 对象,因此崩溃过程只在遇到其他对象时继续 matrix 物体。它认为 cba 按照这个顺序,以及 b 是列表中的最后一个条目,它是 matrix 对象。

铸造规则

由于NA的相关工作,铸造规则在角落案件中发生了一些变化。尤其是对于标量+标量的组合:

  • 这个 longlong 类型 (q 现在停留 longlong 对于任何其他号码的操作 (? b h i l q p B H I )之前被铸造为 int_ (l )这个 ulonglong 类型 (Q 现在留下来 ulonglong 而不是 uint (L

  • 这个 timedelta64 类型 (m )现在可以与任何整数类型混合 (b h i l q p B H I L Q P )之前提出 TypeError .

对于array+scalar,上面的规则只是广播,除了当array和scalar是无符号/有符号整数时的情况,然后将结果转换为array类型(可能更大的大小),如以下示例所示:

>>> (np.zeros((2,), dtype=np.uint8) + np.int16(257)).dtype
dtype('uint16')
>>> (np.zeros((2,), dtype=np.int8) + np.uint16(257)).dtype
dtype('int16')
>>> (np.zeros((2,), dtype=np.int16) + np.uint32(2**17)).dtype
dtype('int32')

大小是否增加取决于标量的大小,例如:

>>> (np.zeros((2,), dtype=np.uint8) + np.int16(255)).dtype
dtype('uint8')
>>> (np.zeros((2,), dtype=np.uint8) + np.int16(256)).dtype
dtype('uint16')

也是一个 complex128 标量+ float32 数组被强制转换为 complex64 .

在numpy 1.7中 datetime64 类型 (M )必须通过将类型显式指定为第二个参数(例如 np.datetime64(2000, 'Y')

贬抑

一般

使用指定自定义字符串格式化程序 _format 数组属性已弃用。新的 formatter 关键字在 numpy.set_printoptionsnumpy.array2string 可以改为使用。

已删除多项式包中不推荐使用的导入。

concatenate 现在,如果 axis != 0 . numpy<1.7.0的版本忽略了一维数组的轴参数值。我们现在允许这样做,但在适当的时候我们会提出一个错误。

C-API

直接访问pyarrayObject字段 * has been deprecated. Direct access has been recommended against for many releases. Expect similar deprecations for PyArray_Descr* 以及未来为numpy 2.0做准备的其他核心对象。

旧_defines.h中的宏已弃用,将在下一个主要版本(>=2.0)中删除。SED脚本工具/替换旧宏。SED可用于用新版本替换这些宏。

您可以通过添加一行由 #define NPY_NO_DEPRECATED_API 以及目标版本号,例如 NPY_1_7_API_VERSION ,在包含任何 NumPy 邮件头之前。

这个 NPY_CHAR 会员 NPY_TYPES 枚举已弃用,将在numpy 1.8中删除。参见讨论 gh-2801 了解更多详细信息。