该版本支持 Python 2.6 - 2.7 和 3.2 - 3.4。
-
在各个领域进行了许多性能改进,尤其是对小数组的索引和操作明显更快。现在索引操作也会释放 GIL。
-
添加了nanmedian和nanpercentile,完善了 nanfunction 集。
-
旧的 numeric 和 numarray 模块已被移除。
-
doc/pyrex 和 doc/cython 目录已被移除。
-
doc/numpybook 目录已被移除。
-
numpy/testing/numpytest.py 文件已被移除,以及其中包含的 importall 函数。
-
numpy/polynomial/polytemplate.py 文件将在 NumPy 1.10.0 中被移除。
-
默认情况下,就地操作的强制转换将在 Numpy 1.10.0 中更改为‘same_kind’。这肯定会破坏一些当前忽略警告的代码。
-
在 1.10.0 中,宽松的步幅检查将成为默认设置
-
字符串版本检查将中断,例如,‘1.9’ > ‘1.10’为 True。已添加了一个 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
。由于特殊值可以在最小可用浮点类型中表示,因此不再执行向上转换。
例如:
np.array([1.], dtype=np.float32) * float('nan')
现在保持为float32
而不是转换为float64
。涉及非特殊值的操作未发生变化。
如果给定多个要计算的百分位数,numpy.percentile 返回一个数组而不是列表。单个百分位数仍然返回一个标量。该数组等同于通过np.array
将旧版本返回的列表转换为数组。
如果使用overwrite_input
选项,则输入仅部分排序而不是完全排序。
所有tofile
异常现在都是IOError
,以前有些是ValueError
。
对 numpy.ma.core._check_fill_value 进行了两个更改:
-
当填充值为字符串且数组类型不是‘OSUV’之一时,会引发 TypeError 而不是使用默认填充值。
-
当填充值溢出数组类型时,会引发 TypeError 而不是 OverflowError。
这可能会导致依赖于多项式类从 PolyBase 派生的人遇到问题。它们现在都是从抽象基类 ABCPolyBase 派生的。严格来说,应该涉及到弃用,但没有找到使用旧基类的外部代码。
已修复生成二项式随机变量算法中的一个错误。这个更改可能会改变执行的随机抽样次数,因此在调用 distribution.c::rk_binomial_btpe 后,序列位置将不同。任何依赖于 RNG 处于已知状态的测试应该被检查和/或更新。
如果 np.random.seed
和 np.random.RandomState
的种子不能安全地转换为 32 位无符号整数,则现在会抛出 ValueError
。现在失败的应用程序可以通过将高 32 位值掩码为零来修复:seed = seed & 0xFFFFFFFF
。这在旧版本中是默默地完成的,因此随机流保持不变。
np.argmin
和 np.argmax
及其等效的 C-API 函数的 out
参数现在被检查以确保精确匹配所需的输出形状。如果检查失败,则会引发 ValueError
而不是 TypeError
。
移除不必要的广播符号限制。np.einsum('ijk,j->ijk', A, B)
也可以写成 np.einsum('ij...,j->ij...', A, B)
(省略号在‘j’上不再需要)
NumPy 索引在这个版本中进行了完全重写。这使得大多数高级整数索引操作更快,并且不应该有其他影响。然而,在高级索引操作中引入了一些微妙的变化和弃用:
-
对标量数组进行布尔索引将始终返回一个新的 1 维数组。这意味着
array(1)[array(True)]
返回array([1])
而不是原始数组。 -
对一维数组进行高级索引以前有(未记录的)特殊处理,关于在值数组的形状太小或不匹配时如何重复值数组在赋值中。使用这种方法的代码将引发错误。为了兼容性,您可以使用
arr.flat[index] = values
,它使用旧的代码分支。(例如 `a = np.ones(10); a[np.arange(10)] = [1, 2, 3]) -
高级索引的迭代顺序过去总是 C 顺序。在 NumPy 1.9 中,迭代顺序会根据输入进行调整,并且不保证(除了一个单一的高级索引,出于兼容性原因永远不会被反转)。这意味着如果向同一元素分配多个值,则结果是未定义的。一个例子是
arr[[0, 0], [1, 1]] = [1, 2]
,这可能将arr[0, 1]
设置为 1 或 2。 -
与迭代顺序等效,高级索引结果的内存布局已调整以实现更快的索引,并且无法预测。
-
所有索引操作都返回视图或副本。没有索引操作会返回原始数组对象。(例如
arr[...]
) -
将来,布尔数组样式(例如 python bools 列表)将始终被视为布尔索引,布尔标量(包括 python
True
)将成为合法的boolean索引。此时,对于标量数组,已经允许一般的positive = a[a > 0]
在a
为零维时起作用。 -
在 NumPy 1.8 中,如果操作的结果是标量,可以使用
array(True)
和array(False)
分别等同于 1 和 0。在 NumPy 1.9 中将引发错误,并且如上所述,在将来将被视为布尔索引。 -
所有非整数数组样式都已被弃用,自定义整数对象的对象数组可能需要显式转换。
-
高级索引的错误报告更加详细,但在某些情况下错误类型已更改。(索引数组的广播错误报告为
IndexError
) -
使用多个省略号(
...
)进行索引已被弃用。
对于像add.reduce或sum这样的缩减 ufuncs,非整数轴索引已被弃用。
当一个参数为整数或浮点 dtype,另一个参数为字符串 dtype 时,promote_types
函数现在返回有效的字符串长度。以前,即使输入的字符串 dtype 长度不足以存储转换为字符串的最大整数/浮点值,它总是返回输入的字符串 dtype。
如果字符串 dtype 的长度不足以存储转换为字符串的最大整数/浮点值,则can_cast
函数现在在“安全”转换模式下返回 False,对于整数/浮点 dtype 和字符串 dtype。以前,在“安全”模式下,can_cast
对于整数/浮点 dtype 和任何长度的字符串 dtype 返回 True。
如果要转换为的字符串 dtype 在“安全”转换模式下不足以容纳正在转换的整数/浮点数组的最大值,则astype
方法现在会返回错误。以前,即使结果被截断,也允许转换。
npyio.recfromcsv不再接受未记录的update关键字,该关键字曾用于覆盖dtype关键字。
doc/swig
目录已移至tools/swig
。
未使用的simple_capsule_dtor
函数已从npy_3kcompat.h
中移除。请注意,此头文件不应在 numpy 之外使用;其他项目在需要时应使用自己的副本。
当直接访问sq_item
或sq_ass_item
PyObject 插槽以获取项目时,将不再支持负索引。然而,PySequence_GetItem
和PySequence_SetItem
可以修复负索引,以便在那里使用。
现在调用NpyIter_RemoveAxis
时,迭代器范围将被重置。
当跟踪多索引并且迭代器没有被缓冲时,可以使用NpyIter_RemoveAxis
。在这种情况下,迭代器的大小可能会缩小。因为迭代器的总大小是有限的,在这些调用之前,迭代器可能会太大。在这种情况下,其大小将被设置为-1
,并且在构造时不会发出错误,而是在移除多索引、设置迭代器范围或获取下一个函数时发出错误。
这对当前工作的代码没有影响,但强调了如果这些条件可能发生时需要检查错误返回的必要性。在大多数情况下,被迭代的数组和迭代器一样大,因此不会出现这样的问题。
这个更改已经应用于 1.8.1 版本。
为了匹配zeros函数,zeros_like现在返回一个用空字符串初始化的数组,而不是一个填充了*‘0’*的数组。
np.percentile
现在具有插值关键字参数,用于指定百分位数落在两个值之间时应如何插值。请查看文档以获取可用选项。
自 1.7 版本以来,np.median
和np.percentile
现在支持类似 ufunc reductions 的通用轴参数。现在可以使用 axis=(index, index)来选择要减少的轴列表。还添加了keepdims
关键字参数,以便将广播到原始形状的数组。
现在可以使用 dtype 参数指定linspace
和logspace
函数返回的数据类型。
对于ndim
超过 2 的数组,这些函数现在将应用于最后两个轴,而不是引发异常。
ndarray.tobytes
和MaskedArray.tobytes
已添加为tostring
的别名,用于将数组导出为bytes
。这在 Python 3 中更一致,因为str
和bytes
不相同。
添加了对 ppc64le 和 OpenRISC 架构的实验性支持。
所有数值 numpy 类型现在都在 python numbers
模块中注册了类型层次结构。
可以使用这个新的布尔参数指定范德蒙矩阵的列的顺序。
现在可以作为可选返回值获取输入中每个唯一项出现的次数。
np.nanmedian
和np.nanpercentile
函数的行为类似于中位数和百分位数函数,只是会忽略 NaN 值。
当 numpy 版本升级到 1.10.devel 时,可以从 numpy.lib 中导入该类,并用于版本比较。例如:
>>> 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
现在正确地广播其两个输入数组,即使它们具有不同的维度数量。在早期版本中,这可能会导致引发错误或计算错误的结果。
sum 方法现在使用成对求和,但仅沿着快速轴,并且对长度<=8192 的值组进行。这也应该改善某些常见情况下 var 和 std 的准确性。
np.percentile
已经实现为np.partition
,该方法仅通过选择算法部分排序数据。这将时间复杂度从O(nlog(n))
改进为O(n)
。
使用np.array
将包含数组的列表转换为数组的性能已经改进。现在在速度上等同于np.vstack(list)
。
对于内置数值类型,np.searchsorted
不再依赖于数据类型的compare
函数来执行搜索,而是通过特定类型的函数实现。根据输入的大小,这可能会带来超过 2 倍的性能改进。
设置numpy.distutils.system_info.system_info.verbosity = 0
,然后调用numpy.distutils.system_info.get_info('blas_opt')
将不会在输出中打印任何内容。这主要是为了其他使用 numpy.distutils 的包。
当协方差矩阵不是半正定时,会引发RuntimeWarning
警告。
多项式类已经重构为使用抽象基类而不是模板,以实现一个共同的接口。这使得导入多项式包更快,��为在导入时不需要编译类。
几个更多的函数现在释放全局解释器锁,允许使用 threading
模块更有效地并行化。特别是 GIL 现在会在 fancy indexing、np.where
和 random
模块中释放,现在使用每个状态锁而不是 GIL。
内置的假设基类的行为类似于普通数组的假设正在被移除。特别是,repr
和 str
现在应该更可靠地工作。
使用非整数 numpy 标量重复 python 序列已被弃用。例如 np.float_(2) * [1]
将在未来出错。
对 select
的整数和空输入已被弃用。将来只有布尔数组将是有效条件,而空的 condlist
将被视为输入错误而不是返回默认值。
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 中是相同对象,也将始终返回 False(并在将来出错)。
等号运算符 == 将来会像 np.equal 一样引发错误,如果广播或元素比较等失败。
与 arr == None 的比较将来会进行逐元素比较,而不仅仅返回 False。代码应该使用 arr is None。
所有这些更改现在都会在此时给出 Deprecation- 或 FutureWarnings。
实用函数 npy_PyFile_Dup 和 npy_PyFile_DupClose 被内部缓冲 python 3 应用于其文件对象所破坏。为了解决这个问题,在 npy_3kcompat.h 中声明了两个新函数 npy_PyFile_Dup2 和 npy_PyFile_DupClose2,并弃用了旧函数。由于这些函数的脆弱性,建议尽可能使用 python API。
此更改已应用于 1.8.1 版本。
-
在各个领域进行了许多性能改进,尤其是对小数组的索引和操作明显更快。现在索引操作也会释放 GIL。
-
nanmedian 和 nanpercentile 的添加完善了 nanfunction 集合。
-
oldnumeric 和 numarray 模块已被移除。
-
doc/pyrex 和 doc/cython 目录已被删除。
-
doc/numpybook 目录已被删除。
-
numpy/testing/numpytest.py 文件已与其包含的 importall 函数一起被删除。
-
numpy/polynomial/polytemplate.py 文件将在 NumPy 1.10.0 中被移除。
-
默认的就地操作类型转换将在 Numpy 1.10.0 中更改为 ‘same_kind’。这肯定会破坏一些当前忽略警告的代码。
-
在 1.10.0 中,宽松的步幅检查将成为默认设置。
-
字符串版本检查会出现问题,例如,‘1.9’ > ‘1.10’ 为 True。已添加了一个 NumpyVersion 类,可用于此类比较。
-
对角线和 diag 函数将在 1.10.0 中返回可写视图
-
S 和/或 a 数据类型可能会更改以表示 Python 字符串而不是字节,在 Python 3 中,这两种类型非常不同。
在 NumPy 1.8 中,对角线和 diag 函数返回只读副本,在 NumPy 1.9 中它们返回只读视图,在 1.10 中它们将返回可写视图。
在以前的 numpy 版本中,涉及包含特殊值 NaN
、Inf
和 -Inf
的浮点标量的操作导致结果类型至少为 float64
。由于特殊值可以用最小可用的浮点类型表示,因此不再执行向上转换。
例如:
np.array([1.], dtype=np.float32) * float('nan')
现在仍然保持为 float32
而不是转换为 float64
。涉及非特殊值的操作未更改。
如果给定多个要计算的百分位数,numpy.percentile 返回一个数组而不是列表。单个百分位数仍然返回一个标量。该数组等同于通过 np.array
将旧版本返回的列表转换为数组。
如果使用 overwrite_input
选项,则输入仅部分而不是完全排序。
所有 tofile
异常现在都是 IOError
,以前有些是 ValueError
。
对 numpy.ma.core._check_fill_value 进行了两个更改:
-
当填充值为字符串且数组类型不是 ‘OSUV’ 之一时,会引发 TypeError 而不是使用默认填充值。
-
当填充值溢出数组类型时,会引发 TypeError 而不是 OverflowError。
这可能会导致依赖于多项式类从 PolyBase 派生的人遇到问题。它们现在都是从抽象基类 ABCPolyBase 派生的。严格来说,应该涉及弃用,但找不到使用旧基类的外部代码。
已修复生成二项随机变量算法中的一个错误。此更改可能会改变执行的随机抽样数量,因此在调用 distribution.c::rk_binomial_btpe 后,序列位置将不同。任何依赖于 RNG 处于已知状态的测试应该进行检查和/或更新。
np.random.seed
和 np.random.RandomState
现在如果种子不能安全地转换为 32 位无符号整数将抛出 ValueError
。现在失败的应用程序可以通过将高 32 位值掩码为零来修复:seed = seed & 0xFFFFFFFF
。这在旧版本中是默默地完成的,以便随机流保持不变。
np.argmin
和 np.argmax
及其等效的 C-API 函数的 out
参数现在会被检查以确保与期望的输出形状完全匹配。如果检查失败,将引发 ValueError
而不是 TypeError
。
删除不必要的广播符号限制。np.einsum('ijk,j->ijk', A, B)
也可以写成 np.einsum('ij...,j->ij...', A, B)
(省略号在‘j’上不再是必需的)
在这个版本中,NumPy 的索引已经完全重写。这使得大多数高级整数索引操作更快,并且不应该有其他影响。然而,在高级索引操作中引入了一些微妙的变化和弃用:
-
对标量数组进行布尔索引将始终返回一个新的一维数组。这意味着
array(1)[array(True)]
返回array([1])
而不是原始数组。 -
对一维数组进行高级索引以前有关于在值数组的形状太小或不匹配时重复值数组的特殊处理(未记录)。使用此代码将引发错误。为了兼容性,您可以使用
arr.flat[index] = values
,它使用旧的代码分支。(例如a = np.ones(10); a[np.arange(10)] = [1, 2, 3]
) -
高级索引的迭代顺序以前总是 C 顺序。在 NumPy 1.9 中,迭代顺序会根据输入进行调整,并且不保证(除了一个单一的高级索引,出于兼容性原因永远不会被反转)。这意味着如果将多个值分配给同一个元素,则结果是未定义的。一个例子是
arr[[0, 0], [1, 1]] = [1, 2]
,这可能将arr[0, 1]
设置为 1 或 2。 -
与迭代顺序类似,高级索引结果的内存布局会根据更快的索引进行调整,无法预测。
-
所有的索引操作都会返回一个视图或副本。没有任何索引操作会返回原始数组对象。(例如
arr[...]
) -
将来,布尔数组(如 python 布尔列表)将始终被视为布尔索引,布尔标量(包括 python
True
)将是合法的布尔索引。此时,对于标量数组,已经允许一般的positive = a[a > 0]
在a
是零维时起作用。 -
在 NumPy 1.8 中,如果操作的结果是标量,可以使用
array(True)
和array(False)
相当于 1 和 0。这在 NumPy 1.9 中将引发错误,并且如上所述,将来会被视为布尔索引。 -
所有非整数数组都已被弃用,自定义整数对象的对象数组可能需要显式转换。
-
高级索引的错误报告更加详细,但在某些情况下错误类型已经发生了变化。(广播索引数组的错误报告为
IndexError
) -
使用多个省略号(
...
)进行索引已被弃用。
非整数轴索引到缩减 ufuncs(如add.reduce或sum)已被弃用。
promote_types
函数现在在给定整数或浮点 dtype 作为一个参数和字符串 dtype 作为另一个参数时返回有效的字符串长度。以前,即使输入的字符串 dtype 长度不足以存储转换为字符串的最大整数/浮点值,它也总是返回输入的字符串 dtype。
如果字符串 dtype 长度不足以存储转换为字符串的最大整数/浮点值,则can_cast
函数现在在“安全”转换模式下对整数/浮点 dtype 和字符串 dtype 返回 False。以前,在“安全”模式下,can_cast
对整数/浮点 dtype 和任何长度的字符串 dtype 返回 True。
如果要转换为的字符串 dtype 在“安全”转换模式下不足以容纳要转换的整数/浮点数组的最大值,则astype
方法现在会返回错误。以前,即使结果被截断,也允许进行转换。
npyio.recfromcsv不再接受未记录的update关键字,该关键字曾用于覆盖dtype关键字。
doc/swig
目录已移动到tools/swig
。
未使用的simple_capsule_dtor
函数已从npy_3kcompat.h
中删除。请注意,此头文件不应在 numpy 之外使用;其他项目在需要时应使用自己的文件副本。
当直接访问sq_item
或sq_ass_item
PyObject 插槽以获取项目时,将不再支持负索引。然而,PySequence_GetItem
和PySequence_SetItem
修复了负索引,以便可以在那里使用它们。
现在调用NpyIter_RemoveAxis
时,迭代器范围将被重置。
当跟踪多索引并且迭代器未被缓冲时,可以使用NpyIter_RemoveAxis
。在这种情况下,迭代器的大小可能会缩小。因为迭代器的总大小是有限的,在这些调用之前,迭代器可能会太大。在这种情况下,其大小将被设置为-1
,并且在构造时不会发出错误,而是在移除多索引、设置迭代器范围或获取下一个函数时发出错误。
这对当前正常工作的代码没有影响,但强调了如果这些条件可能发生时需要检查错误返回的必要性。在大多数情况下,被迭代的数组与迭代器一样大,因此不会出现这样的问题。
这个更改已经应用于 1.8.1 版本。
为了匹配zeros函数,zeros_like现在返回一个用空字符串初始化的数组,而不是一个填充了*‘0’*的数组。
在 NumPy 1.8 中,对角线和 diag 函数返回只读副本,在 NumPy 1.9 中它们返回只读视图,在 1.10 中它们将返回可写视图。
在以前的 numpy 版本中,涉及包含特殊值NaN
、Inf
和-Inf
的浮点标量的操作导致结果类型至少为float64
。由于特殊值可以在最小可用的浮点类型中表示,因此不再执行向上转换。
例如:
np.array([1.], dtype=np.float32) * float('nan')
现在保持为float32
而不是转换为float64
。涉及非特殊值的操作未更改。
如果给定多个要计算的百分位数,numpy.percentile 返回一个数组而不是列表。单个百分位数仍然返回一个标量。该数组等同于通过np.array
将旧版本返回的列表转换为数组。
如果使用overwrite_input
选项,则输入只部分排序而不是完全排序。
所有tofile
异常现在都是IOError
,以前有些是ValueError
。
numpy.ma.core._check_fill_value 的两个更改:
-
当填充值为字符串且数组类型不是‘OSUV’之一时,会引发 TypeError 而不是使用默认填充值。
-
当填充值溢出数组类型时,会引发 TypeError 而不是 OverflowError。
这可能会导致依赖于多项式类从 PolyBase 派生的人遇到问题。它们现在都是从抽象基类 ABCPolyBase 派生的。严格来说,应该涉及到弃用,但找不到使用旧基类的外部代码。
已修复生成二项随机变量算法中的一个错误。此更改可能会改变执行的随机抽样数量,因此在调用 distribution.c::rk_binomial_btpe 后,序列位置将不同。任何依赖于 RNG 处于已知状态的测试应该被检查和/或更新。
如果np.random.seed
和np.random.RandomState
的种子无法安全地转换为 32 位无符号整数,则现在会抛出ValueError
。现在失败的应用程序可以通过将高 32 位值屏蔽为零来修复:seed = seed & 0xFFFFFFFF
。这在旧版本中是默默地完成的,因此随机流保持不变。
np.argmin
和np.argmax
及其等效的 C-API 函数的out
参数现在被检查以确切匹配所需的输出形状。如果检查失败,则会引发ValueError
而不是TypeError
。
删除不必要的广播符号限制。np.einsum('ijk,j->ijk', A, B)
也可以写成np.einsum('ij...,j->ij...', A, B)
(省略号在‘j’上不再需要)
NumPy 索引在这个版本中进行了完全重写。这使得大多数高级整数索引操作更快,并且不应该有其他影响。然而,在高级索引操作中引入了一些微妙的变化和弃用:
-
对标量数组进行布尔索引将始终返回一个新的 1 维数组。这意味着
array(1)[array(True)]
会给出array([1])
而不是原始数组。 -
高级索引到一维数组在分配时对值数组的形状进行特殊处理,当值数组的形状太小或不匹配时,会出现(未记录的)特殊情况。使用此代码将引发错误。为了兼容性,您可以使用
arr.flat[index] = values
,它使用旧的代码分支。(例如`a = np.ones(10); a[np.arange(10)] = [1, 2, 3]) -
高级索引的迭代顺序过去总是 C 顺序。在 NumPy 1.9 中,迭代顺序会根据输入进行调整,并且不保证(除了一个单一高级索引,出于兼容性原因永远不会被反转)。这意味着如果将多个值分配给相同的元素,则结果是未定义的。一个例子是
arr[[0, 0], [1, 1]] = [1, 2]
,这可能将arr[0, 1]
设置为 1 或 2。 -
与迭代顺序类似,高级索引结果的内存布局被调整以实现更快的索引,并且无法预测。
-
所有索引操作都返回一个视图或副本。没有任何索引操作会返回原始数组对象。(例如
arr[...]
) -
将来,布尔数组类似物(例如 python 布尔列表)将始终被视为布尔索引,布尔标量(包括 python
True
)将是合法的布尔索引。此时,对于标量数组,这已经是这种情况,以允许一般的positive = a[a > 0]
在a
是零维时起作用。 -
在 NumPy 1.8 中,如果操作的结果是标量,可以使用
array(True)
和array(False)
等同于 1 和 0。在 NumPy 1.9 中,这将引发错误,并且如上所述,将来会被视为布尔索引。 -
所有非整数数组类似物已被弃用,自定义整数类对象的对象数组可能必须显式转换。
-
高级索引的错误报告更加详细,但在某些情况下错误类型已经发生了变化。(索引数组的广播错误报告为
IndexError
) -
使用多个省略号(
...
)进行索引已被弃用。
对于像add.reduce或sum这样的缩减 ufunc 的非整数轴索引已被弃用。
当给定一个整数或浮点数 dtype 作为一个参数,另一个参数作为字符串 dtype 时,promote_types
函数现在返回一个有效的字符串长度。以前,即使输入的字���串 dtype 长度不足以存储转换为字符串的最大整数/浮点数值,它总是返回输入的字符串 dtype。
can_cast
函数现在在整数/浮点数 dtype 和字符串 dtype 的“安全”转换模式下返回 False,如果字符串 dtype 的长度不足以存储转换为字符串的最大整数/浮点数值。以前,在“安全”模式下,can_cast
对整数/浮点数 dtype 和任何长度的字符串 dtype 返回 True。
在“安全”转换模式下,如果要转换为的字符串 dtype 长度不足以容纳正在转换的整数/浮点数数组的最大值,则astype
方法现在会返回错误。以前,即使结果被截断,也允许转换。
npyio.recfromcsv不再接受未记录的update关键字,该关键字曾用于覆盖dtype关键字。
doc/swig
目录已移动到tools/swig
。
未使用的simple_capsule_dtor
函数已从npy_3kcompat.h
中删除。请注意,此头文件不应在 numpy 之外使用;其他项目应在需要时使用自己的副本。
当直接访问sq_item
或sq_ass_item
PyObject 插槽以获取项目时,不再支持负索引。然而,PySequence_GetItem
和PySequence_SetItem
修复了负索引,以便在那里使用。
当现在调用NpyIter_RemoveAxis
时,迭代器范围将被重置。
当跟踪多索引并且迭代器未被缓冲时,可以使用NpyIter_RemoveAxis
。在这种情况下,迭代器的大小可能会缩小。由于迭代器的总大小是有限的,在这些调用之前,迭代器可能会太大。在这种情况下,其大小将设置为-1
,并且在构造时不会发出错误,而是在删除多索引、设置迭代器范围或获取下一个函数时发出错误。
这对当前正常工作的代码没有影响,但强调了如果这些条件可能发生,则需要检查错误返回的必要性。在大多数情况下,被迭代的数组与迭代器一样大,因此不会出现这样的问题。
这个更改已经应用到了 1.8.1 版本。
为了匹配zeros函数,zeros_like现在返回一个用空字符串初始化的数组,而不是一个填充有*‘0’*的数组。
np.percentile
现在具有插值关键字参数,用于指定如果百分位数落在两个值之间时应该如何插值点。请查看文档以获取可用选项。
np.median
和np.percentile
现在支持类似 ufunc reductions 的广义轴参数自 1.7 起。现在可以说 axis=(index, index)来选择一个用于缩减的轴列表。还添加了keepdims
关键字参数,以便方便地广播到原始形状的数组。
现在可以使用 dtype 参数指定linspace
和logspace
函数返回的数据类型。
对于ndim
超过 2 的数组,这些函数现在将应用于最后两个轴,而不是引发异常。
ndarray.tobytes
和MaskedArray.tobytes
已添加为tostring
的别名,用于将数组导出为bytes
。这在 Python 3 中更一致,因为str
和bytes
不相同。
增加了对 ppc64le 和 OpenRISC 架构的实验性支持。
所有数值 numpy 类型现在都在 python 的numbers
模块中注册到类型层次结构中。
可以使用这个新的布尔参数指定 Vandermonde 矩阵的列的顺序。
现在可以作为可选返回值获得输入中每个唯一项出现的次数。
np.nanmedian
和np.nanpercentile
函数的行为类似于中位数和百分位数函数,只是忽略 NaN。
当 numpy 版本升级到 1.10.devel 时,该类可以从 numpy.lib 导入,并用于版本比较。例如:
>>> 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.percentile
现在具有插值关键字参数,用于指定如果百分位数落在两个值之间时应该如何插值点。请查看文档以获取可用选项。
np.median
和 np.percentile
现在支持类似于 ufunc reductions 的广义轴参数,自 1.7 版本开始。现在可以使用 axis=(index, index) 来选择要减少的轴列表。keepdims
关键字参数也被添加,以便方便地广播到原始形状的数组。
现在可以使用 dtype ���数指定 linspace
和 logspace
函数返回的数据类型。
对于 ndim
超过 2 的数组,这些函数现在将应用于最后两个轴,而不是引发异常。
ndarray.tobytes
和 MaskedArray.tobytes
已添加为 tostring
的别名,用于将数组导出为 bytes
。这在 Python 3 中更一致,因为 str
和 bytes
不相同。
添加了对 ppc64le 和 OpenRISC 架构的实验性支持。
所有数值 numpy 类型现在都在 python numbers
模块中注册。
可以使用这个新的布尔参数指定范德蒙德矩阵的列的顺序。
现在可以作为可选返回值获取输入中每个唯一项出现的次数。
np.nanmedian
和 np.nanpercentile
函数的行为类似于中位数和百分位数函数,只是会忽略 NaN 值。
当 numpy 版本升级到 1.10.devel 时,该类可以从 numpy.lib 中导入,并用于版本比较。例如:
>>> 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
现在正确地广播其两个输入数组,即使它们具有不同数量的维度。在早期版本中,这将导致引发错误或计算错误的结果。
现在在 sum 方法中使用成对求和,但仅沿着快速轴和长度小于等于 8192 的值组。这也应该改善某些常见情况下 var 和 std 的准确性。
np.percentile
是基于 np.partition
实现的,它只通过选择算法部分排序数据。这将时间复杂度从 O(nlog(n))
改进为 O(n)
。
使用np.array
将包含数组的列表转换为数组的性能已经得到改进。现在在速度上等同于np.vstack(list)
。
对于内置数值类型,np.searchsorted
不再依赖于数据类型的compare
函数来执行搜索,而是现在由特定类型的函数实现。根据输入的大小,这可能导致性能提升超过 2 倍。
设置numpy.distutils.system_info.system_info.verbosity = 0
,然后调用numpy.distutils.system_info.get_info('blas_opt')
将不会在输出中打印任何内容。这主要是为了其他使用 numpy.distutils 的包。
当协方差矩阵不是半正定时,会引发RuntimeWarning
警告。
多项式类已经重构为使用抽象基类而不是模板,以实现一个公共接口。这使得导入多项式包更快,因为在导入时不需要编译类。
现在有更多函数释放全局解释器锁,允许使用threading
模块更有效地并行化。最值得注意的是现在对花式索引、np.where
和random
模块释放了 GIL,现在使用每个状态锁而不是 GIL。
内置假设基类的行为类似于普通数组的假设正在被移除。特别是,repr
和str
现在应该更可靠地工作。
现在在 sum 方法中使用了 Pairwise summation,但仅沿着快速轴,并且对长度<=8192 的值组使用。这也应该改善一些常见情况下 var 和 std 的准确性。
np.percentile
已经实现为np.partition
,它只通过选择算法部分排序数据。这将时间复杂度从O(nlog(n))
改进为O(n)
。
使用np.array
将包含数组的列表转换为数组的性能已经得到改进。现在在速度上等同于np.vstack(list)
。
对于内置数值类型,np.searchsorted
不再依赖于数据类型的compare
函数来执行搜索,而是现在由特定类型的函数实现。根据输入的大小,这可能导致性能提升超过 2 倍。
设置numpy.distutils.system_info.system_info.verbosity = 0
,然后调用numpy.distutils.system_info.get_info('blas_opt')
将不会在输出中打印任何内容。这主要是为了其他使用 numpy.distutils 的包。
当协方差矩阵不是半正定时,会引发RuntimeWarning
警告。
多项式类已经重构,使用抽象基类而不是模板,以实现一个通用接口。这使得导入多项式包更快,因为在导入时不需要编译这些类。
现在有几个函数释放全局解释器锁,允许使用threading
模块更有效地并行化。特别是现在对花式索引、np.where
和random
模块释放了 GIL,现在使用每个状态锁而不是 GIL。
内置假设基类的行为类似于普通数组的假设正在被移除。特别是,repr
和str
现在应该更可靠地工作。
使用非整数 numpy 标量重复 python 序列已被弃用。例如,np.float_(2) * [1]
将在将来引发错误。
对select
的整数和空输入已被弃用。将来只有布尔数组将是有效条件,而空的condlist
将被视为输入错误,而不是返回默认值。
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中是相同对象,也将始终返回 False(并在将来引发错误)。
等号运算符*==将在将来引发类似np.equal*的错误,如果广播或元素比较等失败。
与arr == None的比较将来将执行逐元素比较,而不仅仅返回 False。代码应该使用arr is None。
所有这些更改目前将产生弃用或未来警告。
npy_PyFile_Dup
和npy_PyFile_DupClose
这两个实用函数被内部缓冲破坏,这是由 Python 3 应用于其文件对象的缓冲机制引起的。为了解决这个问题,在npy_3kcompat.h
中声明了两个新函数npy_PyFile_Dup2
和npy_PyFile_DupClose2
,同时弃用了旧函数。由于这些函数的脆弱性,建议尽可能使用 Python API。
这个更改已经应用于 1.8.1 版本。
使用非整数 numpy 标量重复 python 序列已被弃用。例如,np.float_(2) * [1]
将在将来引发错误。
对select
的整数和空输入已被弃用。将来只有布尔数组将是有效条件,而空的condlist
将被视为输入错误,而不是返回默认值。
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 是同一个对象,也会始终返回 False(并在未来引发错误)。
在未来,等号运算符 == 如果广播或元素比较等操作失败,将会引发类似 np.equal 的错误。
与 arr == None 的比较将来会执行逐元素比较,而不仅仅返回 False。代码应该使用 arr is None。
所有这些改变目前都会产生 Deprecation- 或 FutureWarnings。
实用函数 npy_PyFile_Dup 和 npy_PyFile_DupClose 受到 Python 3 对其文件对象应用的内部缓冲的影响而出现问题。为了解决这个问题,在 npy_3kcompat.h 中声明了两个新函数 npy_PyFile_Dup2 和 npy_PyFile_DupClose2,并弃用了旧函数。由于这些函数的脆弱性,建议尽可能使用 Python API。
这个改变已经应用于 1.8.1 版本。