Numpy 1.8.0发行说明

这个版本支持python 2.6-2.7和3.2-3.3。

集锦

  • 新的、没有2to3、python 2和python 3由公共代码库支持。

  • 新的,用于线性代数的gufuncs,支持对堆叠数组的操作。

  • 新的,就地花式索引的UFUNC与 .at 方法。

  • 新的, partition 函数,通过选择快速中值部分排序。

  • 新的, nanmeannanvarnanstd 函数跳过NaN。

  • 新的, fullfull_like 用于创建值初始化数组的函数。

  • 新的, PyUFunc_RegisterLoopForDescr 更好地支持用户数据类型。

  • 许多方面的性能改进。

下降支座

对python版本2.4和2.5的支持已被放弃,

已移除对scons的支持。

未来变化

在此版本中,datetime64类型仍然是实验性的。在1.9中,可能会有一些改变使其更有用。

对角方法当前返回一个新数组并引发一个FutureWarning。在1.9中,它将返回只读视图。

结构化类型数组中的多个字段选择当前返回新数组并引发未来警告。在1.9中,它将返回只读视图。

numpy/oldnumeric和numpy/numarray兼容模块将在1.9中删除。

兼容性说明

doc/sphinxext内容已移动到其自己的Github存储库中,并作为子模块包含在numpy中。有关如何访问内容,请参阅doc/how to_build_docs.rst.txt中的说明。

numpy.void scalars的哈希函数已更改。以前,指向数据的指针被散列为一个整数。现在,散列函数使用元组散列算法组合标量元素的散列函数,但前提是标量是只读的。

默认情况下,Numpy已将其构建系统切换为使用“单独编译”。在以前的版本中,这是受支持的,但不是默认的。这将产生与旧系统相同的结果,但是如果您尝试静态地执行复杂的链接或使用异常的编译器,那么您可能会遇到问题。如果是这样,请提交一个bug,作为临时解决方案,您可以通过导出shell变量npy_separate_compilation=0来重新启用旧的构建系统。

对于AdvancedNew迭代器, oa_ndim 标志现在应该是-1以指示否 op_axesitershape 都通过了。这个 oa_ndim == 0 case,现在表示0-d迭代,并且 op_axes 为空,旧用法已弃用。这不会影响 NpyIter_NewNpyIter_MultiNew 功能。

函数nanargmin和nanargmax现在返回np.iinfo [“因特”] .min表示所有NaN切片中的索引。以前,函数会为数组返回引发ValueError,为标量返回引发NaN。

NPY_RELAXED_STRIDES_CHECKING

有一个新的编译时环境变量 NPY_RELAXED_STRIDES_CHECKING . 如果将该变量设置为1,那么numpy将考虑更多的数组是C-或F-连续的——例如,可以同时考虑C-和F-连续的列向量。新的定义更准确,允许更快的代码,从而减少不必要的复制,并在内部简化numpy的代码。但是,它也可能会破坏第三方库,因为第三方库对C和F连续数组的跨距值做了过强的假设。(目前也知道这会使用memoryviews破坏cython代码,而memoryviews将在cython中修复。)这将成为未来版本中的默认设置,因此请根据以下代码构建的numpy测试您的代码:

NPY_RELAXED_STRIDES_CHECKING=1 python setup.py install

你可以通过跑步来检查NPY放松步幅检查是否有效:

np.ones((10, 1), order="C").flags.f_contiguous

这将是 True 如果启用了放松步幅检查,并且 False 否则。到目前为止,我们看到的典型问题是C代码,它与C连续数组一起工作,并假定可以通过查看中的最后一个元素来访问itemsize。 PyArray_STRIDES(arr) 数组。当放松的步伐生效时,这是不正确的(事实上,在某些角落的情况下,这从来不是真的)。相反,使用 PyArray_ITEMSIZE(arr) .

有关更多信息,请检查文档中的“ndarray的内存布局”部分。

以非数组作为第二个参数的二进制操作

形式的二进制运算 <array-or-subclass> * <non-array-subclass> 在哪里? <non-array-subclass> 声明一个 __array_priority__ 高于 <array-or-subclass> 将无条件返回 NotImplemented 给予 <non-array-subclass> 操作的机会。以前, NotImplemented would only be returned if <non-array-subclass> actually implemented the reversed operation, and after a (potentially expensive) array conversion of <non-array-subclass> had been attempted. (bugpull request

功能 median 用于 overwrite_input 只对数组进行部分排序

如果 median 用于 overwrite_input 选项输入数组现在只能部分排序而不是完全排序。

固定到financial.npv

NPV函数有一个错误。与文档所述相反,它是从索引中总结出来的 1M 而不是来自 0M - 1 . 修复程序更改返回值。mirr函数称为npv函数,但它解决了这个问题,因此它也是固定的,mirr函数的返回值保持不变。

比较NaN编号时出现运行时警告

比较 NaN 浮点数现在提升 invalid 运行时警告。如果A NaN 应为,可以使用np.errstate忽略警告。例如。::

with np.errstate(invalid='ignore'):
    operation()

新特点

对堆叠阵列上线性代数的支持

gufunc机器现在用于np.linalg,允许对堆叠的数组和向量进行操作。例如::

>>> a
array([[[ 1.,  1.],
        [ 0.,  1.]],

       [[ 1.,  1.],
        [ 0.,  1.]]])

>>> np.linalg.inv(a)
array([[[ 1., -1.],
        [ 0.,  1.]],

       [[ 1., -1.],
        [ 0.,  1.]]])

为不明飞行物制定适当的索引

函数 at 已添加到ufunc对象中,以便在使用花式索引时允许就地ufunc不进行缓冲。例如,下面将递增数组中的第一个和第二个项,并将递增第三个项两次: numpy.add.at(arr, [0, 1, 2, 2], 1)

这是许多人错误的想法 arr[[0, 1, 2, 2]] += 1 可以,但这不起作用,因为 arr[2] 只需复制到 arr 两次,而不是两次递增。

新功能 partitionargpartition

通过选择算法对数组进行部分排序的新函数。

A partition 按指数 k 移动 k 数组前面的最小元素。之前的所有元素 k 然后小于或等于位置中的值 k 以及以下所有元素 k 大于或等于位置中的值 k . 这些界限内的值的顺序未定义。可以提供一系列索引,以便在迭代分区时将所有索引排序到其排序位置。这可用于有效地获取订单统计数据,如样本的中位数或百分位数。 partition 线性时间复杂度为 O(n) 当一个完整的分类 O(n log(n)) .

新功能 nanmeannanvarnanstd

新增了NAN感知统计函数。在这些函数中,如果在所有计算中忽略了NaN值,则会得到结果。

新功能 fullfull_like

新的方便函数,用于创建填充了特定值的数组;与现有的 zeroszeros_like 功能。

与大文件的IO兼容性

大于2GB的大型NPZ文件可以加载到64位系统上。

针对openblas的建筑

现在可以通过编辑site.cfg针对openblas构建numpy。

新常量

欧拉常数现在以numpy形式显示为欧拉伽玛。

新的二维码模式

新的模式'complete'、'reduced'和'raw'已添加到QR分解中,旧的'full'和'economic'模式已被弃用。“reduced”模式取代了旧的“full”模式,是默认的“full”模式,因此可以通过不指定模式来保持向后兼容性。

“完全”模式返回全维因子分解,这对于获取范围空间的正交补码的基础很有用。“raw”模式返回包含户主反射镜和比例因子的数组,这些反射镜和比例因子可以在将来应用q而无需转换为矩阵。“经济”模式只是被弃用了,它没有太多的用途,也没有比“原始”模式更有效。

新的 invert 参数 in1d

函数 in1d 现在接受 invertTrue ,使返回的数组反转。

高级索引使用 np.newaxis

现在可以使用 np.newaxis /` none`与索引数组一起使用,而不是只在简单索引中使用。这意味着 array[np.newaxis, [0, 1]] 现在将按预期工作,并在为数组准备新轴时选择前两行。

C-API

新的UFUNC现在可以注册为内置输入类型和自定义输出类型。在此更改之前,当从python调用ufunc时,numpy无法找到正确的ufunc循环函数,因为ufunc循环签名匹配逻辑没有查看输出操作数类型。现在,只要用户提供具有正确输出类型的输出参数,就会找到正确的ufunc循环。

runtests.py

一个简单的测试运行程序脚本 runtests.py 加入。它还建立了numpy via setup.py build 并且可以在开发期间轻松地用于运行测试。

改进

IO性能改进

通过分块提高了读取大型文件的性能(另请参见IO兼容性)。

性能改进 pad

这个 pad 函数有一个新的实现,大大提高了除 mode= (为了向后兼容而保留)。对于秩大于等于4的情况,具有维数的缩放得到了显著的改进。

性能改进 isnanisinfisfinitebyteswap

isnanisinfisfinitebyteswap 已经进行了改进,以利用编译器内置功能,避免对libc进行昂贵的调用。这将在GNUlibc系统上提高这些操作的性能大约两倍。

通过SSE2矢量化提高性能

为了利用SSE2 CPU SIMD指令,对多个功能进行了优化。

  • float32和float64:
    • 基础数学 (addsubtractdividemultiply

    • sqrt

    • minimum/maximum

    • absolute

  • Bool:
    • logical_or

    • logical_and

    • logical_not

这将提高这些操作的性能,根据CPU缓存中数据的位置,float32/float64最多可提高4x/2x,bool最多可提高10x。对于就地操作,性能增益最大。

为了使用改进的函数,必须在编译时启用SSE2指令集。它默认在x86_64系统上启用。在具有可用CPU的x86_32上,必须通过将适当的标志传递给cflags build变量(使用gcc的msse2)来启用它。

性能改进 median

median 现按以下方式实施: partition 而不是 sort 它将时间复杂性从O(n log(n))降低到O(n)。如果与 overwrite_input 选项数组现在只部分排序,而不是完全排序。

UFUNC C-API中可重写的操作数标志

创建ufunc时,可以通过ufunc对象的新opu flags属性重写默认的ufunc操作数标志。例如,要为第一个要读/写的输入设置操作数标志:

PyObject * ufunc=pyufunc_fromfuncddata(…);ufunc->op_标志 [0] =npy-iter-readwrite;

这允许ufunc就地执行操作。此外,全局nditer标志可以通过ufunc对象的新iter-flags属性重写。例如,要设置ufunc的reduce标志:

ufunc->iter_flags=npy_iter_reduce_ok;

变化

一般

函数np.take现在允许0-D数组作为索引。

现在,默认情况下启用单独的编译模式。

对np.insert和np.delete的几个更改:

  • 以前,只会忽略指向数组末尾的负索引和索引。现在,这将引发一个未来警告或反预测警告。将来,它们将被视为普通索引对待它们——负索引将环绕,超出界限的索引将产生错误。

  • 以前,布尔索引被视为整数(总是指数组中的第0项或第1项)。在未来,他们将被当作面具对待。在这个版本中,他们对即将发生的变化提出了一个未来警告。

  • 在1.7号。np.insert已经允许使用语法 np.insert(arr, 3, [1,2,3]) 在一个位置插入多个项目。在1.8号。这也是可能的 np.insert(arr, [3], [1, 2, 3]) .

从np.pad填充的区域现在是正确的圆形,而不是截断。

C-API数组添加

在数组C-API中添加了四个新函数。

  • PyArray_Partition

  • PyArray_ArgPartition

  • PyArray_SelectkindConverter

  • PyDataMem_NEW_ZEROED

C-API UFUNC添加

一个新的函数被添加到UFUNC C-API中,它允许使用DESCR为用户类型注册一个内部循环。

  • PyUFunc_RegisterLoopForDescr

C-API开发人员改进

这个 PyArray_Type 实例创建函数 tp_new 现在使用 tp_basicsize 确定要分配多少内存。仅在早期版本中 sizeof(PyArrayObject) 分配了字节的内存,通常需要重新实现C-API子类型 tp_new .

贬抑

QR因子分解的“完全”和“经济”模式已被弃用。

一般

不推荐使用非整数作为索引和大多数整数参数。以前的浮点索引和函数参数(如轴或形状)被截断为整数而不发出警告。例如 arr.reshape(3., -1)arr[0.] 将在numpy 1.8中触发拒绝警告,在未来的numpy版本中,它们将引发错误。

作者

此版本包含以下人员的工作,他们为此版本至少提供了一个补丁。名字按名字的字母顺序排列:

  • 87

  • Adam Ginsburg +

  • 亚当·格里菲斯+

  • 亚历山大·伯罗波尔斯基+

  • Alex Barth +

  • Alex Ford +

  • 安德烈亚斯希尔博尔+

  • 安德烈亚斯·克洛伊克纳+

  • 安德烈亚斯·施瓦布+

  • Andrew Horton +

  • 阿格里芬+

  • Arink Verma +

  • 巴戈阿米贝克语+

  • 巴托斯电信公司+

  • 贝伯特218+

  • Benjamin Root +

  • Bill Spotz +

  • 布拉德利·M·弗罗尔

  • Carwyn Pelley +

  • 查尔斯·哈里斯

  • 克里斯

  • 克里斯蒂安·布鲁弗+

  • 克里斯托夫·丹恩+

  • 克里斯托夫·戈尔克

  • Dan Hipschman +

  • 丹尼尔+

  • Dan Miller +

  • DavyDave400

  • 大卫·库纳波

  • 大卫沃德法利

  • 丹尼斯拉克拉德

  • 德默纳

  • Edward Catmur +

  • Egor Zindy +

  • 内岩

  • 埃里克点火

  • 埃里克·福德

  • Eric Moore +

  • Eric Price +

  • 法兹鲁沙赫里亚尔+

  • F_lix哈特曼+

  • 培瑞兹

  • Frank B +

  • 弗兰克·布雷特林+

  • 弗里德里克

  • 加布里埃尔

  • GaelVaroquaux

  • Guillaume Gay +

  • 汉儒

  • 哈罗德米尔斯

  • 克雷姆+

  • 詹姆斯韦伯伯

  • Jason Madden +

  • 杰伊布尔克

  • 杰罗姆凯莱赫+

  • 杰斯·G·梅兹+

  • JMOZMOZ+

  • 乔诺斯曼

  • 约翰内斯·施恩伯格+

  • 约翰·本尼迪克森+

  • 约翰·萨尔瓦蒂埃+

  • 约翰·施彻尔特+

  • 乔纳森·沃尔特曼+

  • Joon Ro +

  • Jos de Kloe +

  • 约瑟夫·马蒂诺·拉加德+

  • 乔希·华纳(Mac)+

  • 约斯坦B_fl_ystad+

  • 胡安·路易斯·卡诺·罗德尔·盖兹+

  • Julian Taylor +

  • Julien Phalip +

  • K.-迈克尔·艾尔+

  • Kumar Appaiah +

  • 拉尔斯布丁克

  • Leon Weber +

  • 路易斯·佩德罗·科埃略

  • 马金·朱兹基维茨

  • 职业选手马克·韦伯

  • 马丁·范·克威克+

  • Martin Baeuml +

  • 马丁史派克

  • 马丁·泰希曼+

  • Matt Davis +

  • 马太布雷特

  • 马克西米利安·阿尔伯特+

  • M—D W+

  • 迈克尔·德罗特布姆

  • MWTWEWS+

  • 纳撒尼尔·J·史密斯

  • 尼古拉斯·谢弗+

  • Nils Werner +

  • 奥乔达维德

  • Ond_ej_ert_k

  • 奥维拉莱斯

  • 保罗伊万诺夫

  • 泡利·维塔坦

  • 彼得杰

  • 拉尔夫甘默斯

  • Raul Cota +

  • 理查德·哈特斯利+

  • Robert Costa +

  • 罗伯特·科恩

  • Rob Ruana +

  • 罗南拉米

  • 桑德罗托西

  • 沙沙培力克+

  • 塞巴斯蒂安伯格

  • 船长西伯德

  • 范德华

  • 史提夫+

  • Takafumi Arakaki公司+

  • 托马斯·罗比泰尔+

  • Tomas Tomecek +

  • 特拉维斯·E·奥列芬特

  • 瓦伦丁海涅尔

  • 弗拉基米尔·拉特斯基+

  • 沃伦·韦克瑟

  • 雅罗斯拉夫哈尔琴科

  • 尤里诉扎伊特塞夫案+

共有119人参与了这次释放。名字带“+”的人第一次贡献了一个补丁。