这个版本支持python 2.6-2.7和3.2-3.4。
各个领域的性能改进很多,最显著的是索引和小阵列上的操作速度明显更快。索引操作现在也释放了gil。
添加 nanmedian 和 nanpercentile 舍入NanFunction集。
已删除OldNumeric和NumArray模块。
已删除doc/pyrex和doc/cython目录。
已删除doc/numpybook目录。
numpy/testing/numpytest.py文件已与其包含的importall函数一起删除。
numpy/polynomy/polytemplate.py文件将在numpy 1.10.0中删除。
在numpy 1.10.0中,inplace操作的默认强制转换将更改为“同类”。这肯定会破坏一些当前忽略警告的代码。
放松步幅检查将是1.10.0中的默认设置。
字符串版本检查将中断,因为“1.9”、“1.10”为真。已添加可用于此类比较的NumpyVersion类。
对角线和diag函数将返回1.10.0中的可写视图。
这个 S 和/或 a DTypes可以更改为表示python字符串而不是字节,在python 3中,这两种类型非常不同。
在numpy 1.8中,对角线和diag函数返回只读副本,在numpy 1.9中返回只读视图,在1.10中返回可写视图。
在以前的numpy版本中,涉及包含特殊值的浮点标量的操作 NaN , Inf 和 -Inf 导致结果类型至少为 float64 . 由于特殊值可以用最小的可用浮点类型表示,因此不会再执行上溯。
NaN
Inf
-Inf
float64
例如,数据类型:
np.array([1.], dtype=np.float32) * float('nan')
现在仍然 float32 而不是被强制 float64 . 未更改涉及非特殊值的操作。
float32
如果给定多个百分位数来计算numpy.percentile,则返回数组而不是列表。一个百分点值仍然返回一个标量。数组相当于将旧版本中返回的列表通过 np.array .
np.array
如果 overwrite_input 选项被使用输入只是部分而不是完全排序。
overwrite_input
所有 tofile 现在有例外 IOError ,有些是以前的 ValueError .
tofile
IOError
ValueError
对numpy.ma.core.进行两次更改。检查填充值:
当填充值为字符串且数组类型不是“osuv”时,将引发typeerror,而不是使用默认填充值。
当填充值溢出数组类型时,将引发类型错误而不是溢出错误。
这可能会导致依赖多项式类从多基派生的人出现问题。它们现在都是从抽象基类abcpolybase派生的。严格地说,应该涉及到一个贬义,但没有找到使用旧基类的外部代码。
一种生成二项式随机变量的算法中的一个错误已经被修复。此更改可能会更改执行的随机绘制的数量,因此在调用distribution.c::rk_二项式u btpe后,序列位置将不同。任何依赖RNG处于已知状态的测试都应进行检查和/或更新。
np.random.seed 和 np.random.RandomState 现在扔一个 ValueError 如果种子不能安全地转换为32位无符号整数。现在失败的应用程序可以通过将较高的32位值屏蔽为零来修复: seed = seed & 0xFFFFFFFF . 这是在旧版本中静默执行的操作,因此随机流保持不变。
np.random.seed
np.random.RandomState
seed = seed & 0xFFFFFFFF
这个 out 参数 np.argmin 和 np.argmax 现在检查它们的等效C-API函数,以精确匹配所需的输出形状。如果支票不通过 ValueError 而不是 TypeError 提高了。
out
np.argmin
np.argmax
TypeError
删除不必要的广播符号限制。 np.einsum('ijk,j->ijk', A, B) 也可以写为 np.einsum('ij...,j->ij...', A, B) (在“j”上不再需要省略号)
np.einsum('ijk,j->ijk', A, B)
np.einsum('ij...,j->ij...', A, B)
numpy索引在此版本中已完全重写。这使得最高级的整数索引操作更快,应该没有其他影响。但是,高级索引操作中引入了一些细微的更改和取消预测:
布尔索引到标量数组将始终返回一个新的一维数组。这意味着 array(1)[array(True)] 给予 array([1]) 而不是原始数组。
array(1)[array(True)]
array([1])
对一维数组的高级索引,过去在值数组的形状太小或不匹配时,对于在赋值中重复值数组有(未记录)特殊处理。使用此代码将引发错误。为了兼容性,您可以使用 arr.flat[index] = values ,它使用旧的代码分支。(例如 a = np.ones(10); a[np.arange(10)] = [1, 2, 3] )
arr.flat[index] = values
a = np.ones(10); a[np.arange(10)] = [1, 2, 3]
以前高级索引的迭代顺序总是C顺序。在1.9号。迭代顺序适应输入,不保证(除了 单一的 高级索引,由于兼容性的原因永远不会反转)。这意味着如果将多个值赋给同一个元素,则结果是未定义的。例如: arr[[0, 0], [1, 1]] = [1, 2] 可以设置 arr[0, 1] 到1或2。
arr[[0, 0], [1, 1]] = [1, 2]
arr[0, 1]
与迭代顺序相同,高级索引结果的内存布局适合于更快的索引,并且无法预测。
所有索引操作都返回一个视图或副本。没有索引操作将返回原始数组对象。(例如 arr[...] )
arr[...]
在将来,布尔数组(如python bools的列表)将始终被视为布尔索引和布尔标量(包括python True )将是一个合法的 布尔 索引。此时,对于标量数组来说,这已经是允许 positive = a[a > 0] 工作时 a 是零维的。
True
positive = a[a > 0]
a
在numpy 1.8中,可以使用 array(True) 和 array(False) 如果操作结果是标量,则等于1和0。这将在numpy 1.9中引发一个错误,如上所述,在将来将其视为布尔索引。
array(True)
array(False)
所有非整数数组类型都已弃用,自定义整数类对象的对象数组可能必须显式强制转换。
高级索引的错误报告信息更丰富,但在某些情况下错误类型已更改。(索引数组的广播错误报告为 IndexError )
IndexError
使用多个省略号进行索引 (... )已弃用。
...
非整数轴索引,用于减少类UFUNC add.reduce 或 sum 被贬低。
promote_types
promote_types 函数现在返回一个有效的字符串长度,条件是将整数或浮点数据类型作为一个参数,将字符串数据类型作为另一个参数。以前,它总是返回输入字符串dtype,即使其长度不足以存储转换为字符串的max integer/float值。
can_cast
can_cast 如果字符串数据类型长度不足以存储转换为字符串的最大整数/浮点值,那么函数现在在整数/浮点数据类型和字符串数据类型的“安全”转换模式下返回false。以前 can_cast 在“safe”模式下,对于integer/float数据类型和任意长度的string数据类型返回true。
这个 astype 如果要强制转换到的字符串数据类型在“安全”强制转换模式下的长度不足以容纳正在强制转换的整数/浮点数组的最大值,则方法现在返回一个错误。以前,即使结果被截断,也允许强制转换。
astype
npyio.recfromcsv 不再接受无证件 update 关键字,用于重写 dtype 关键字。
doc/swig
这个 doc/swig 目录已移动到 tools/swig .
tools/swig
npy_3kcompat.h
未使用的 simple_capsule_dtor 函数已从中删除 npy_3kcompat.h . 请注意,此头并不打算在numpy之外使用;其他项目在需要时应该使用自己的文件副本。
simple_capsule_dtor
sq_item
sq_ass_item
当直接访问 sq_item 或 sq_ass_item PyObject槽用于项目获取,负索引将不再受支持。 PySequence_GetItem 和 PySequence_SetItem 但是,固定负指数,以便它们可以在那里使用。
PySequence_GetItem
PySequence_SetItem
什么时候? NpyIter_RemoveAxis 现在调用,迭代器范围将被重置。
NpyIter_RemoveAxis
当跟踪多索引而不缓冲迭代器时,可以使用 NpyIter_RemoveAxis . 在这种情况下,迭代器可以缩小大小。因为迭代器的总大小是有限的,所以迭代器在调用之前可能太大。在这种情况下,它的大小将设置为 -1 以及在构造时,但在删除多索引、设置迭代器范围或获取下一个函数时发出的错误。
-1
这对当前工作的代码没有影响,但强调了在可能发生这些情况时检查错误返回的必要性。在大多数情况下,被迭代的数组和迭代器一样大,这样就不会发生这样的问题。
此更改已应用于1.8.1版本。
zeros_like
匹配 zeros 功能 zeros_like 现在返回用空字符串初始化的数组,而不是用 '0' .
np.percentile 现在有了interpolation关键字参数来指定如果百分位数介于两个值之间,应该以何种方式对点进行插值。有关可用选项,请参阅文档。
np.percentile
np.median 和 np.percentile 现在支持通用轴参数,比如1.7以后的ufunc约简。现在可以说axis=(index,index)来选择要进行缩减的轴列表。这个 keepdims 还添加了关键字参数以方便广播到原始形状的数组。
np.median
keepdims
np.linspace
np.logspace
返回的数据类型 linspace 和 logspace 现在可以使用dtype参数指定函数。
linspace
logspace
np.triu
np.tril
用于数组 ndim 超过2,这些函数现在将应用于最后两个轴,而不是引发异常。
ndim
tobytes
tostring
ndarray.tobytes 和 MaskedArray.tobytes 已添加为的别名 tostring 将数组导出为 bytes . 这在Python3中更为一致,其中 str 和 bytes 不一样。
ndarray.tobytes
MaskedArray.tobytes
bytes
str
增加了对PPC64LE和OpenRISC体系结构的实验支持。
numbers
所有数字numpy类型现在都注册到python中的类型层次结构中。 numbers 模块。
increasing
np.vander
vandermonde矩阵的列的顺序可以用这个新的布尔参数指定。
unique_counts
np.unique
现在可以作为可选返回值获得输入中每个唯一项出现的次数。
这个 np.nanmedian 和 np.nanpercentile 函数的行为类似于中位数和百分位数函数,除了NaN被忽略。
np.nanmedian
np.nanpercentile
该类可以从numpy.lib导入,并在numpy版本变为1.10.devel时用于版本比较。例如::
>>> from numpy.lib import NumpyVersion >>> if NumpyVersion(np.__version__) < '1.10.0'): ... print('Wow, that is an old NumPy version!')
numpy存储格式1.0只允许数组头的总大小为65535字节。具有大量列的结构化数组可能会超过此值。添加了一种新的格式2.0,将头段大小扩展到4 Gib。 np.save 如果数据需要,将自动以2.0格式保存,否则将始终使用更兼容的1.0格式。
np.cross
np.cross 现在正确地广播它的两个输入数组,即使它们有不同的维数。在早期版本中,这将导致引发错误或计算错误的结果。
现在求和方法中使用了成对求和,但仅沿快速轴和长度不等于8192的值组使用。在某些常见情况下,这还应提高VaR和Std的准确性。
np.partition
np.percentile 已在以下方面实施 np.partition 它只通过选择算法对数据进行部分排序。这提高了时间复杂性 O(nlog(n)) 到 O(n) .
O(nlog(n))
O(n)
将包含数组的列表转换为使用 np.array 已经改进了。它现在的速度相当于 np.vstack(list) .
np.vstack(list)
np.searchsorted
对于内置的数字类型, np.searchsorted 不再依赖数据类型 compare 函数执行搜索,但现在由类型特定的函数实现。根据输入的大小,这可能导致性能提高2倍以上。
compare
集合 numpy.distutils.system_info.system_info.verbosity = 0 然后打电话给 numpy.distutils.system_info.get_info('blas_opt') 不会在输出上打印任何内容。这主要适用于使用numpy.distutils的其他包。
numpy.distutils.system_info.system_info.verbosity = 0
numpy.distutils.system_info.get_info('blas_opt')
np.random.multivariate_normal
A RuntimeWarning 当协方差矩阵不是半正定的时候会发出警告。
RuntimeWarning
为了实现公共接口,多项式类被重构为使用抽象基类而不是模板。这使得导入多项式包更快,因为导入时不需要编译类。
现在还有几个函数释放了全局解释器锁,允许使用 threading 模块。最值得注意的是,英国国债现在以花哨的指数方式发行, np.where 以及 random 模块现在使用每状态锁而不是gil。
threading
np.where
random
将删除基本类行为类似于普通数组的内置假设。在粒子中, repr 和 str 现在应该更可靠地工作了。
repr
不推荐使用非整数numpy scalars来重复python序列。例如 np.float_(2) * [1] 将来会是一个错误。
np.float_(2) * [1]
select
整数和空输入 select 被贬低。在将来,只有布尔数组才是有效的条件,并且 condlist 将被视为输入错误而不是返回默认值。
condlist
rank
这个 rank 函数已被弃用,以避免与 numpy.linalg.matrix_rank .
numpy.linalg.matrix_rank
在未来的对象数组比较中 == 和 np.equal 不再使用身份检查。例如:
>>> a = np.array([np.array([1, 2, 3]), 1]) >>> b = np.array([np.array([1, 2, 3]), 1]) >>> a == b
即使数组位于 a 和 b 是同一个对象。
相等运算符 == 将来会引起错误,比如 np.equal 如果广播或元素比较等失败。
比较 arr == None 将来将进行元素比较,而不是返回false。代码应该使用 arr is None .
所有这些变化都会在这个时候带来不可预测或未来的警告。
实用程序函数npy-pyfile-dup和npy-pyfile-dupclose被内部缓冲python 3应用于其文件对象而中断。要修复这两个新函数npy_pyfile_dup2和npy_pyfile_dupclose2在npy_3kcompat.h中声明,旧函数已弃用。由于这些函数的脆弱性,建议尽可能使用python API。