这个版本支持python 2.7和3.4-3.6。
像这样的操作 a + b + c 将在某些平台上重用临时设备,从而减少内存使用并加快执行速度。 就地操作检查输入是否与输出重叠,并创建临时文件以避免出现问题。 新的 __array_ufunc__ 属性提供了改进的类重写默认UFUNC行为的能力。 新的 np.block 用于创建阻塞数组的函数。
像这样的操作 a + b + c 将在某些平台上重用临时设备,从而减少内存使用并加快执行速度。
a + b + c
就地操作检查输入是否与输出重叠,并创建临时文件以避免出现问题。
新的 __array_ufunc__ 属性提供了改进的类重写默认UFUNC行为的能力。
__array_ufunc__
新的 np.block 用于创建阻塞数组的函数。
np.block
新的 np.positive UFUNC
np.positive
新的 np.divmod ufunc提供了更高效的divmod。
np.divmod
新的 np.isnat 对nat特殊值的ufunc测试。
np.isnat
新的 np.heaviside ufunc计算重侧边函数。
np.heaviside
新的 np.isin 功能,改进 in1d .
np.isin
in1d
新的 PyArray_MapIterArrayCopyIfOverlap 添加到numpy c-api。
PyArray_MapIterArrayCopyIfOverlap
详情见下文。
调用 np.fix , np.isposinf 和 np.isneginf 具有 f(x, y=out) 已弃用-参数应作为 f(x, out=out) 与其他类似于ufunc的接口匹配。
np.fix
np.isposinf
np.isneginf
f(x, y=out)
f(x, out=out)
C-API的使用 NPY_CHAR 自1.7版以来已弃用的类型号现在将在运行时引发弃用警告。需要重新编译使用旧的f2py版本构建的扩展以删除警告。
NPY_CHAR
np.ma.argsort , np.ma.minimum.reduce 和 np.ma.maximum.reduce 应使用显式调用 axis 参数,当应用于维度超过2的数组时,作为此参数的默认值 (None )与其他 NumPy 人不一致 (-1 , 0 和 0 ,分别)。
np.ma.argsort
np.ma.minimum.reduce
np.ma.maximum.reduce
None
-1
0
np.ma.MaskedArray.mini 不推荐使用,因为它几乎重复了 np.MaskedArray.min . 精确的等效行为可以用 np.ma.minimum.reduce .
np.ma.MaskedArray.mini
np.MaskedArray.min
单参数形式 np.ma.minimum 和 np.ma.maximum 被贬低。 np.maximum . np.ma.minimum(x) 现在应该拼写出来了 np.ma.minimum.reduce(x) ,这与如何处理 np.minimum .
np.ma.minimum
np.ma.maximum
np.maximum
np.ma.minimum(x)
np.ma.minimum.reduce(x)
np.minimum
调用 ndarray.conjugate 不推荐使用非数字数据类型(它应与 np.conjugate ,这将引发一个错误)。
ndarray.conjugate
np.conjugate
调用 expand_dims 当 axis 关键字不满足 -a.ndim - 1 <= axis <= a.ndim 在哪里 a 数组是否被重新整形,已弃用。
expand_dims
axis
-a.ndim - 1 <= axis <= a.ndim
a
具有不同字段名的结构化数组之间的分配将在numpy 1.14中更改。以前,DST中的字段将被设置为SRC中同名字段的值。在numpy 1.14中,字段将改为“按位置”分配:DST的第n个字段将设置为SRC数组的第n个字段。请注意 FutureWarning 在numpy 1.12中引发错误地将此更改报告为numpy 1.13而不是numpy 1.14的计划。
FutureWarning
numpy.distutils 现在自动确定与GCC兼容的编译器的C文件依赖性。
numpy.distutils
numpy.hstack() 现在投掷 ValueError 而不是 IndexError 当输入为空时。
numpy.hstack()
ValueError
IndexError
接受轴参数的函数,当该参数超出范围时,现在引发 np.AxisError 而不是 IndexError 和 ValueError . 为了向后兼容, AxisError 二者的子类。
np.AxisError
AxisError
已删除对某些不明确的数据类型的支持,这些数据类型是无意中允许的,形式为 (old_dtype, new_dtype) ,其中一个数据类型是或包含 object D型。作为例外,表单的数据类型 (object, [('name', object)]) 由于现有的使用证据,仍然得到支持。
(old_dtype, new_dtype)
object
(object, [('name', object)])
有关详细信息,请参阅更改部分。
partition ,使用非整数分区索引时出现类型错误。
partition
NpyIter_AdvancedNew ,当 oa_ndim == 0 和 op_axes 是空的
NpyIter_AdvancedNew
oa_ndim == 0
op_axes
negative(bool_) ,当对布尔值应用负数时出现类型错误。
negative(bool_)
subtract(bool_, bool_) ,从布尔值中减去布尔值时出现类型错误。
subtract(bool_, bool_)
np.equal, np.not_equal ,对象标识不重写失败的比较。
np.equal, np.not_equal
np.equal, np.not_equal ,对象标识不重写非布尔比较。
已删除不推荐使用的布尔索引行为。有关详细信息,请参阅下面的更改。
已弃用 np.alterdot() 和 np.restoredot() 远离的。
np.alterdot()
np.restoredot()
numpy.average 保留子类
numpy.average
array == None 和 array != None 进行元素比较。
array == None
array != None
np.equal, np.not_equal ,对象标识不重写比较结果。
以前 bool(dtype) 将返回到默认的python实现,该实现检查 len(dtype) > 0 . 自从 dtype 对象实现 __len__ 作为记录字段的数目, bool 标量数据类型的计算结果为 False 这是不可能的。现在 bool(dtype) == True 适用于所有类型。
bool(dtype)
len(dtype) > 0
dtype
__len__
bool
False
bool(dtype) == True
__getslice__
__setslice__
ndarray
在python 2.7中对np.ndarray进行子类化时,它不再是 _necessary_ 实施 __*slice__ 在派生类上,如 __*item__ 将正确拦截这些呼叫。
__*slice__
__*item__
任何实现这些功能的代码都将像以前一样工作。调用“ndarray.”的代码(例如通过 super(...).__getslice__ )现在将发出弃用警告- .__getitem__(slice(start, end)) 应该改为使用。
super(...).__getslice__
.__getitem__(slice(start, end))
...
此行为反映np.ndarray的行为,并说明对象数据类型的maskedarrays中的嵌套数组,以及与其他索引形式组合的省略号。
现在允许从npyier中移除零尺寸的轴。这可能意味着代码从npyiter中删除轴在以后访问删除的维度时必须添加额外的检查。
最大的后续变化是现在允许gufuncs的内部尺寸为零。这意味着一个gufunc现在必须预测一个空的内部维度,而这是不可能的,反而会引发一个错误。
对于大多数古芬克人来说,不需要改变。但是,现在Gufuncs可以使用签名,例如 (..., N, M) -> (..., M) 返回有效结果,如果 N=0 无需进一步包装代码。
(..., N, M) -> (..., M)
N=0
类似 PyArray_MapIterArray 但是加上一个 copy_if_overlap 参数。如果 copy_if_overlap != 0 ,检查输入是否与任何其他数组有内存重叠,并根据需要进行复制,以避免在迭代期间修改输入时出现问题。有关更完整的文档,请参阅文档。
PyArray_MapIterArray
copy_if_overlap
copy_if_overlap != 0
这是重新命名和重新设计的 __numpy_ufunc__ . 任何类,无论是否为ndarray子类,都可以定义或设置此方法 None 为了重载 NumPy 的 ufuncs 的行为。这与Python的工作原理非常相似 __mul__ 以及其他二进制操作程序。有关此新选项的实现和行为的更详细描述,请参阅文档。API是临时的,我们还不能保证向后兼容性,因为在等待反馈之前可能会进行修改。见 NEP 13 和 documentation 了解更多详细信息。
__numpy_ufunc__
__mul__
positive
此ufunc对应于一元 + 但不同 + 在ndarray上,如果数组值不支持数值操作,则会引发错误。
divmod
这个ufunc对应于python内置 divmod ,用于实现 divmod 在numpy数组上调用时。 np.divmod(x, y) 计算结果等于 (np.floor_divide(x, y), np.remainder(x, y)) 但是大约是单独调用函数的两倍。
np.divmod(x, y)
(np.floor_divide(x, y), np.remainder(x, y))
新的UFUNC np.isnat 查找datetime和timedelta数组中特殊nat值的位置。这类似于 np.isnan .
np.isnan
新功能 np.heaviside(x, h0) (ufunc)计算重侧函数:
np.heaviside(x, h0)
{ 0 if x < 0, heaviside(x, h0) = { h0 if x == 0, { 1 if x > 0.
添加新的 block 当前叠加函数的函数 vstack , hstack 和 stack . 这允许同时跨多个轴连接,其语法与数组创建类似,但元素本身可以是数组。例如::
block
vstack
hstack
stack
>>> A = np.eye(2) * 2 >>> B = np.eye(3) * 3 >>> np.block([ ... [A, np.zeros((2, 3))], ... [np.ones((3, 2)), B ] ... ]) array([[ 2., 0., 0., 0., 0.], [ 0., 2., 0., 0., 0.], [ 1., 1., 3., 0., 0.], [ 1., 1., 0., 3., 0.], [ 1., 1., 0., 0., 3.]])
虽然它主要用于块矩阵,但它适用于数组的任意维。
它类似于matlab创建块矩阵的方括号符号。
isin
新功能 isin 测试N维数组的每个元素是否存在于第二个数组中的任何位置。它是对 in1d 保留第一个数组的形状。
在平台上提供 backtrace 函数numpy将尝试避免在涉及基本数值类型的表达式中创建临时变量。例如 d = a + b + c 转换为 d = a + b; d += c 这可以提高大型阵列的性能,因为执行该操作所需的内存带宽较小。
backtrace
d = a + b + c
d = a + b; d += c
axes
unique
在一个n维数组中,用户现在可以选择沿其查找重复n-1维元素的轴,方法是使用 numpy.unique . 如果 axis=None (默认)。
numpy.unique
axis=None
np.gradient
用户现在可以为数据指定非常量间距。特别地 np.gradient 现在可以采取:
用于指定所有维度的采样距离的单个标量。
n个标量指定每个维度的恒定采样距离。即 dx , dy , dz ,…
dx
dy
dz
n数组,指定沿f的每个维度的值的坐标。数组的长度必须与相应维度的大小匹配。
n个标量/数组的任意组合,含义为2。3。
这意味着,例如,现在可以执行以下操作:
>>> f = np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float_) >>> dx = 2. >>> y = [1., 1.5, 3.5] >>> np.gradient(f, dx, y) [array([[ 1. , 1. , -0.5], [ 1. , 1. , -0.5]]), array([[ 2. , 2. , 2. ], [ 2. , 1.7, 0.5]])]
apply_along_axis
以前,传递给的函数只能返回标量或一维数组 apply_along_axis . 现在,它可以返回任何维数的数组(包括0d),并且这个数组的形状替换了被迭代的数组的轴。
.ndim
.shape
为了与…保持一致 ndarray 和 broadcast , d.ndim 是 len(d.shape) .
broadcast
d.ndim
len(d.shape)
numpy现在支持内存跟踪 tracemalloc python 3.6或更高版本的模块。来自numpy的内存分配被放入由 numpy.lib.tracemalloc_domain . 请注意,numpy分配不会显示在 tracemalloc 早期的python版本。
numpy.lib.tracemalloc_domain
在启用“松弛步幅检查”的环境中设置npy_relaxed_steps_debug=1将导致编译numpy,并将受影响的步幅设置为npy_intp的最大值,以帮助检测下游项目中步幅的无效使用。启用时,无效使用通常会导致引发错误,但错误的确切类型取决于代码的详细信息。在野外观察到类型错误和溢出错误。
以前的情况是,此选项在版本中禁用,在主版本中启用,并在两个必需的代码编辑之间进行更改。现在默认情况下它被禁用,但可以为测试生成启用。
由于数据依赖性问题,UFUNC输入和输出操作数内存重叠的操作在以前的numpy版本中产生未定义的结果。在numpy 1.13.0中,这些操作的结果现在定义为与没有内存重叠的等效操作相同。
受影响的操作现在根据需要制作临时副本,以消除数据依赖性。由于检测这些案例的计算代价很高,因此使用启发式方法,在极少数情况下可能会导致不必要的临时复制。对于数据依赖性足够简单的启发式分析操作,即使数组重叠,也不会进行临时复制,如果可以推断,则不需要复制。例如,“np.add(a,b,out=a)”不涉及副本。
要演示以前未定义的操作,请执行以下操作:
>>> x = np.arange(16).astype(float) >>> np.add(x[1:], x[:-1], out=x[1:])
在numpy 1.13.0中,最后一行保证等于:
>>> np.add(x[1:].copy(), x[:-1].copy(), out=x[1:])
具有简单无问题数据依赖性的类似操作是:
>>> x = np.arange(16).astype(float) >>> np.add(x[1:], x[:-1], out=x[:-1])
它将继续产生与以前numpy版本相同的结果,并且不会涉及不必要的临时副本。
更改也适用于就地二进制操作,例如:
>>> x = np.random.rand(500, 500) >>> x += x.T
此声明现在保证相当于 x[...] = x + x.T ,而在以前的numpy版本中,结果是未定义的。
x[...] = x + x.T
现在可以使用免费的 MinGW 工具集,也在python 3.5下。这对于只进行计算并适度使用运行时的扩展(例如,从文件读取和写入)最有效。注意,这并不能消除对mingwpy的需求;如果您大量使用运行时,很可能会遇到 issues. 相反,它应该被视为一种创可贴,直到明威完全发挥作用。
扩展也可以使用mingw工具集从(可移动的)winpython 3.4发行版中使用运行库编译,这对于使用pyside1/qt4前端的程序很有用。
packbits
unpackbits
功能 numpy.packbits 带布尔输入和 numpy.unpackbits 对连续数据进行了优化,使其速度显著加快。
numpy.packbits
numpy.unpackbits
在以前版本的numpy中, finfo 函数返回了有关 double double 格式 longdouble 动力PC(PPC)上的浮动式。numpy算法无法处理有效位中的可变位数,这是 PPC long doubles . 这个版本通过使用启发式方法检测PPC双双精度格式的存在来传递失败的算法。使用这些启发式方法的副作用是 finfo 函数比以前的版本快。
finfo
longdouble
没有的ndarray的子类 repr 专业化现在可以正确地缩进数据和类型行。
repr
蒙面数组的比较对于蒙面标量是错误的,对于维度大于1的结构化数组是失败的。这两个问题现在都解决了。在此过程中,确保在获取结构化数组的结果时,适当忽略屏蔽字段,即,如果两个数组中未屏蔽的所有字段都相等,则结果相等,从而使行为与通过比较非结构化屏蔽数组获得的行为相同,然后执行 .all() 超过某个轴。
.all()
np.matrix 每次尝试使用它时失败,例如, np.matrix('True') . 现在,这是预期的效果。
np.matrix
np.matrix('True')
linalg
中的所有以下功能 np.linalg 现在,当最后两个维度中的输入数组为0时,可以使用: det , slogdet , pinv , eigvals , eigvalsh , eig , eigh .
np.linalg
det
slogdet
pinv
eigvals
eigvalsh
eig
eigh
numpy与lapack的最小实现捆绑在一起,用于未安装lapack库的系统,名称为 lapack_lite . 已从Lapack 3.0.0(1999年6月30日)升级至Lapack 3.2.2(2010年6月30日)。见 LAPACK changelogs 关于所有这些变化的细节。
lapack_lite
虽然没有新功能通过 numpy 这修复了一些关于“工作区”大小的错误,并且在某些地方可能使用更快的算法。
numpy
reduce
np.hypot.reduce
np.logical_xor
这现在在空数组上工作,返回0,并且可以在多个轴上减少。以前,A ValueError 在这些箱子里被扔了。
包含自身的对象数组不再导致递归错误。
包含 list 对象的打印方式现在可以清楚地区分二维对象数组和一维对象列表数组。
list
argsort
sort
默认情况下, argsort 现在将屏蔽值放在排序数组的末尾,方法与 sort 已经做到了。另外, end_with 参数添加到 argsort ,以符合 sort . 请注意,此参数不在末尾添加,因此会中断传递的任何代码 fill_value 作为位置参数。
end_with
fill_value
average
对于ndarray子类, numpy.average 现在将返回子类的实例,匹配大多数其他numpy函数的行为,如 mean . 因此,返回标量的调用现在可能返回子类数组标量。
mean
以前这些操作返回scalars False 和 True 分别。
True
以前,这些函数总是将相同的对象视为相等的。这会导致覆盖比较失败、比较未返回布尔值的对象(如np.array)以及比较结果与对象标识不同的对象(如nans)。
布尔数组(如python bools的列表)始终被视为布尔索引。
布尔标量(包括python True )是合法的布尔索引,从未被视为整数。
布尔索引必须与其索引的轴的维度匹配。
在赋值的lhs上使用的布尔索引必须与rhs的维度匹配。
布尔索引到标量数组返回一个新的一维数组。这意味着 array(1)[array(True)] 给予 array([1]) 而不是原始数组。
array(1)[array(True)]
array([1])
np.random.multivariate_normal
现在可以通过使用两个新的关键字参数来调整函数在处理协方差矩阵时的行为:
tol 可用于指定检查协方差矩阵是否为半正定时要使用的公差。
tol
check_valid 可用于配置函数在存在非正半定矩阵时的作用。有效选项包括 ignore , warn 和 raise . 默认值, warn 保留以前版本上使用的行为。
check_valid
ignore
warn
raise
assert_array_less
np.inf
-np.inf
以前, np.testing.assert_array_less 忽略所有无限值。根据文档和直觉,这不是预期的行为。现在考虑-inf<x<inf True 对于任何实数x和所有其他情况都失败。
np.testing.assert_array_less
assert_array_
assert_equal
以前被 assert_array_ 函数不再隐藏。在大多数情况下,警告应该是正确的,如果出现警告,则需要使用这些功能更改测试。对于屏蔽数组 assert_equal 版本,比较nat时可能出现警告。该函数目前不专门处理NaT或NaN,如果由于此更改而出现警告,此时最好避免使用它。
offset
memmap
这个 offset 属性中的 memmap 对象现在设置为文件中的偏移量。这只是对大于 mmap.ALLOCATIONGRANULARITY .
mmap.ALLOCATIONGRANULARITY
np.real
np.imag
以前, np.real 和 np.imag 用于在提供标量输入时返回数组对象,该输入与其他函数不一致,如 np.angle 和 np.conj .
np.angle
np.conj
从中派生便利类的abcpolybase类集合 __array_ufun__ = None 为了选择退出UFUNC。如果多项式便利类实例作为参数传递给ufunc,则 TypeError 现在将被提升。
__array_ufun__ = None
TypeError
对于对UFUNC的呼叫,已经可以并建议使用 out 具有多个输出的UFUNC的元组参数。现在已扩展到 reduce , accumulate 和 reduceat 方法。这主要是为了与 __array_ufunc ;目前还没有具有多个输出的UFunc。
out
accumulate
reduceat
__array_ufunc