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.diagonal 和 ndarrays 的对角线方法将返回原始数组的视图,而不是像现在那样生成副本。如果您写入任何这些函数返回的数组,这会产生影响。为了促进这种转换,如果 numpy 1.7 检测到您可能正在尝试写入此类数组,则它会生成 FutureWarning。有关详细信息,请参阅 np.diagonal 的文档。

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

在 numpy 的未来版本中,UFunc out= 参数的默认转换规则将从“unsafe”更改为“same_kind”。 (这也适用于像 a += b 这样的就地操作,相当于 np.add(a, b, out=a)。)大多数违反“same_kind”规则的用法都可能是错误,因此此更改可能会导致错误。暴露依赖于 NumPy 的项目中以前未检测到的错误。在此版本的 numpy 中,此类用法将继续成功,但会引发 DeprecationWarning。

全数组布尔索引已经过优化,可以使用不同的优化代码路径。此代码路径应产生相同的结果,但任何有关代码更改的反馈将不胜感激。

尝试写入只读数组(arr.flags.writeable 设置为 的数组False)会不一致地引发 RuntimeError、ValueError 或 TypeError,具体取决于采用的代码路径。它现在持续引发 ValueError。

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

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

新功能

约简 UFuncs 概括轴=参数#

任何 ufunc.reduce 函数调用以及其他缩减(例如 sum、prod、any、all、max 和 min)都支持选择要缩减的轴子集的功能。以前,可以说 axis=None 表示所有轴,或 axis=# 表示选择单个轴。现在,我们还可以说 axis=(#,#) 来选择要减少的轴列表。

减少 UFuncs 新 keepdims= 参数#

有一个新的 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 #

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

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

轴关键字已添加到积分和微分函数中,张量关键字已添加到评估函数中。这些添加允许在这些函数中使用多维系数数组。用于评估网格或点集上的 2-D 和 3-D 系数数组的新函数与可用于拟合的 2-D 和 3-D 伪范德蒙德矩阵一起添加。

能够填充 n 列数组#

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

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

当前模式有constantedgelinear_rampmaximummeanmedianminimumreflectsymmetricwrap<function>

searchsorted 的新参数#

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

构建系统#

添加了对 AArch64 架构的实验性支持。

CAPI #

新函数PyArray_FailUnlessWriteable提供了一个一致的接口来检查数组的可写性 - 任何与 WRITEABLE 标志事先未知为 True 的数组一起使用的 C 代码,应确保在写入之前调用此函数。

添加了 NumPy C 风格指南 ( doc/C_STYLE_GUIDE.rst)。

变化

一般的

函数 np.concatenate 尝试匹配其输入数组的布局。以前,布局不遵循任何特定原因,并且以不期望的方式依赖于选择用于串联的特定轴。还修复了一个错误,该错误默默地允许超出范围的轴参数。

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

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

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

在 numpy 1.6 中,c.basebc.base.basea。在 numpy 1.7 中, c.basea.

为了提高依赖于旧行为的软件的向后兼容性.base,我们仅“跳过”与新创建的视图具有完全相同类型的对象。如果您使用子类,这会有所不同ndarray 。例如,如果我们有ndarray和对象的混合,matrix它们都是同一原始对象的视图ndarray

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

那么d.base将会是b。这是因为d是一个matrix对象,因此只有遇到其他 matrix对象时,折叠过程才会继续。它按该顺序 考虑cb、 和,并且是该列表中作为对象的最后一个条目。abmatrix

选角规则#

由于 NA 相关的工作,在极端情况下,铸造规则发生了一些变化。特别是对于标量+标量的组合:

  • longlong类型( q ) 现在对于任何其他数字 ( ? bhilqp BHI ) 的操作保持longlong,之前它被转换为int_ ( l )。ulonglong类型 ( Q ) 现在保留为ulonglong而不是uint ( L )。

  • timedelta64类型( m ) 现在可以与任何整数类型 ( bhil qp BHILQP )混合,之前它会引发TypeError

对于数组+标量,除了数组和标量是无符号/有符号整数的情况外,上述规则只是广播,然后结果将转换为数组类型(可能更大的尺寸),如下例所示:

>>> (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数组属性指定自定义字符串格式化程序。可以使用or 中的新格式化程序关键字来代替。numpy.set_printoptionsnumpy.array2string

多项式包中已弃用的导入已被删除。

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

C-API #

不推荐直接访问 PyArrayObject* 的字段。对于许多版本,建议不要直接访问。作为 NumPy 2.0 的准备,预计未来 PyArray_Descr* 和其他核心对象也会出现类似的弃用。

old_defines.h 中的宏已弃用,并将在下一个主要版本 (>= 2.0) 中删除。 sed 脚本 tools/replace_old_macros.sed 可用于将这些宏替换为较新的版本。

您可以通过在包含任何 NumPy 标头之前添加由和 目标版本号(例如 )组成的行来针对已弃用的 C API 测试您的代码。#define NPY_NO_DEPRECATED_APINPY_1_7_API_VERSION

NPY_CHAR枚举成员已NPY_TYPES弃用,并将在 NumPy 1.8 中删除。有关更多详细信息,请参阅gh-2801中的讨论 。