这个版本支持python 2.6-2.7和3.2-3.3。
新的、没有2to3、python 2和python 3由公共代码库支持。
新的,用于线性代数的gufuncs,支持对堆叠数组的操作。
新的,就地花式索引的UFUNC与 .at 方法。
.at
新的, partition 函数,通过选择快速中值部分排序。
partition
新的, nanmean , nanvar 和 nanstd 函数跳过NaN。
nanmean
nanvar
nanstd
新的, full 和 full_like 用于创建值初始化数组的函数。
full
full_like
新的, PyUFunc_RegisterLoopForDescr 更好地支持用户数据类型。
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_axes 和 itershape 都通过了。这个 oa_ndim == 0 case,现在表示0-d迭代,并且 op_axes 为空,旧用法已弃用。这不会影响 NpyIter_New 或 NpyIter_MultiNew 功能。
oa_ndim
op_axes
itershape
oa_ndim == 0
NpyIter_New
NpyIter_MultiNew
函数nanargmin和nanargmax现在返回np.iinfo [“因特”] .min表示所有NaN切片中的索引。以前,函数会为数组返回引发ValueError,为标量返回引发NaN。
有一个新的编译时环境变量 NPY_RELAXED_STRIDES_CHECKING . 如果将该变量设置为1,那么numpy将考虑更多的数组是C-或F-连续的——例如,可以同时考虑C-和F-连续的列向量。新的定义更准确,允许更快的代码,从而减少不必要的复制,并在内部简化numpy的代码。但是,它也可能会破坏第三方库,因为第三方库对C和F连续数组的跨距值做了过强的假设。(目前也知道这会使用memoryviews破坏cython代码,而memoryviews将在cython中修复。)这将成为未来版本中的默认设置,因此请根据以下代码构建的numpy测试您的代码:
NPY_RELAXED_STRIDES_CHECKING
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) .
True
False
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. (bug , pull request )
<array-or-subclass> * <non-array-subclass>
<non-array-subclass>
__array_priority__
<array-or-subclass>
如果 median 用于 overwrite_input 选项输入数组现在只能部分排序而不是完全排序。
NPV函数有一个错误。与文档所述相反,它是从索引中总结出来的 1 到 M 而不是来自 0 到 M - 1 . 修复程序更改返回值。mirr函数称为npv函数,但它解决了这个问题,因此它也是固定的,mirr函数的返回值保持不变。
1
M
0
M - 1
比较 NaN 浮点数现在提升 invalid 运行时警告。如果A NaN 应为,可以使用np.errstate忽略警告。例如。::
NaN
invalid
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)
at
numpy.add.at(arr, [0, 1, 2, 2], 1)
这是许多人错误的想法 arr[[0, 1, 2, 2]] += 1 可以,但这不起作用,因为 arr[2] 只需复制到 arr 两次,而不是两次递增。
arr[[0, 1, 2, 2]] += 1
arr[2]
arr
通过选择算法对数组进行部分排序的新函数。
A partition 按指数 k 移动 k 数组前面的最小元素。之前的所有元素 k 然后小于或等于位置中的值 k 以及以下所有元素 k 大于或等于位置中的值 k . 这些界限内的值的顺序未定义。可以提供一系列索引,以便在迭代分区时将所有索引排序到其排序位置。这可用于有效地获取订单统计数据,如样本的中位数或百分位数。 partition 线性时间复杂度为 O(n) 当一个完整的分类 O(n log(n)) .
k
O(n)
O(n log(n))
新增了NAN感知统计函数。在这些函数中,如果在所有计算中忽略了NaN值,则会得到结果。
新的方便函数,用于创建填充了特定值的数组;与现有的 zeros 和 zeros_like 功能。
大于2GB的大型NPZ文件可以加载到64位系统上。
现在可以通过编辑site.cfg针对openblas构建numpy。
欧拉常数现在以numpy形式显示为欧拉伽玛。
新的模式'complete'、'reduced'和'raw'已添加到QR分解中,旧的'full'和'economic'模式已被弃用。“reduced”模式取代了旧的“full”模式,是默认的“full”模式,因此可以通过不指定模式来保持向后兼容性。
“完全”模式返回全维因子分解,这对于获取范围空间的正交补码的基础很有用。“raw”模式返回包含户主反射镜和比例因子的数组,这些反射镜和比例因子可以在将来应用q而无需转换为矩阵。“经济”模式只是被弃用了,它没有太多的用途,也没有比“原始”模式更有效。
函数 in1d 现在接受 invert 当 True ,使返回的数组反转。
现在可以使用 np.newaxis /` none`与索引数组一起使用,而不是只在简单索引中使用。这意味着 array[np.newaxis, [0, 1]] 现在将按预期工作,并在为数组准备新轴时选择前两行。
array[np.newaxis, [0, 1]]
新的UFUNC现在可以注册为内置输入类型和自定义输出类型。在此更改之前,当从python调用ufunc时,numpy无法找到正确的ufunc循环函数,因为ufunc循环签名匹配逻辑没有查看输出操作数类型。现在,只要用户提供具有正确输出类型的输出参数,就会找到正确的ufunc循环。
一个简单的测试运行程序脚本 runtests.py 加入。它还建立了numpy via setup.py build 并且可以在开发期间轻松地用于运行测试。
runtests.py
setup.py build
通过分块提高了读取大型文件的性能(另请参见IO兼容性)。
这个 pad 函数有一个新的实现,大大提高了除 mode= (为了向后兼容而保留)。对于秩大于等于4的情况,具有维数的缩放得到了显著的改进。
isnan , isinf , isfinite 和 byteswap 已经进行了改进,以利用编译器内置功能,避免对libc进行昂贵的调用。这将在GNUlibc系统上提高这些操作的性能大约两倍。
为了利用SSE2 CPU SIMD指令,对多个功能进行了优化。
基础数学 (add , subtract , divide , multiply )
sqrt
minimum/maximum
absolute
logical_or
logical_and
logical_not
这将提高这些操作的性能,根据CPU缓存中数据的位置,float32/float64最多可提高4x/2x,bool最多可提高10x。对于就地操作,性能增益最大。
为了使用改进的函数,必须在编译时启用SSE2指令集。它默认在x86_64系统上启用。在具有可用CPU的x86_32上,必须通过将适当的标志传递给cflags build变量(使用gcc的msse2)来启用它。
median 现按以下方式实施: partition 而不是 sort 它将时间复杂性从O(n log(n))降低到O(n)。如果与 overwrite_input 选项数组现在只部分排序,而不是完全排序。
创建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中添加了四个新函数。
PyArray_Partition
PyArray_ArgPartition
PyArray_SelectkindConverter
PyDataMem_NEW_ZEROED
一个新的函数被添加到UFUNC C-API中,它允许使用DESCR为用户类型注册一个内部循环。
这个 PyArray_Type 实例创建函数 tp_new 现在使用 tp_basicsize 确定要分配多少内存。仅在早期版本中 sizeof(PyArrayObject) 分配了字节的内存,通常需要重新实现C-API子类型 tp_new .
PyArray_Type
tp_new
tp_basicsize
sizeof(PyArrayObject)
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人参与了这次释放。名字带“+”的人第一次贡献了一个补丁。