NumPy 1.9.2 发布说明
这是 1.9.x 系列中仅进行 bug 修复的发布。
问题已解决
-
#5316: 修复了字符串和复杂类型的 dtype 对齐过大的问题
-
#5424: 修复了在 ndarrays 上使用时的 ma.median
-
#5481: 修复了结构化数组字段的不同字节顺序的 astype
-
#5354: 修复了在剪切复杂数组时的段错误
-
#5524: 允许在非 ndarrays 上使用 np.argpartition
-
#5612: 修复了 ndarray.fill 以接受完整的 uint64 范围
-
#5155: 修复了 loadtxt 在 comments=None 和字符串 None 数据时的问题
-
#4476: 如果结构化 dtype 具有日期时间组件,则掩码数组视图会失败
-
#5388: 使 RandomState.set_state 和 RandomState.get_state 线程安全
-
#5390: 使 seed、randint 和 shuffle 线程安全
-
#5374: 修复了 assert_array_almost_equal_nulp 文档中的错误断言
-
#5393: 添加对 ATLAS > 3.9.33 的支持
-
#5313: 对于 3d 数组,PyArray_AsCArray 导致段错误
-
#5492: 处理 rfftf 中的内存不足
-
#4181: 修复了 random.pareto 文档字符串中的一些错误
-
#5359: linspace 文档字符串进行了轻微更改
-
#4723: 修复了在 AIX 上的编译问题
问题已解决
-
#5316: 修复了字符串和复杂类型的 dtype 对齐过大的问题
-
#5424: 修复了在 ndarrays 上使用时的 ma.median
-
#5481: 修复了结构化数组字段的不同字节顺序的 astype
-
#5354: 修复了在剪切复杂���组时的段错误
-
#5524: 允许在非 ndarrays 上使用 np.argpartition
-
#5612: 修复了 ndarray.fill 以接受完整的 uint64 范围
-
#5155: 修复了 loadtxt 在 comments=None 和字符串 None 数据时的问题
-
#4476: 如果结构化 dtype 具有日期时间组件,则掩码数组视图会失败
-
#5388: 使 RandomState.set_state 和 RandomState.get_state 线程安全
-
#5390: 使 seed、randint 和 shuffle 线程安全
-
#5374: 修正了 assert_array_almost_equal_nulp 文档中的错误
-
#5393: 添加对 ATLAS > 3.9.33 的支持。
-
#5313: PyArray_AsCArray 对 3D 数组导致段错误
-
#5492: 处理 rfftf 中的内存不足问题
-
#4181: 修复 random.pareto 文档字符串中的一些错误
-
#5359: linspace 文档字符串进行了轻微更改
-
#4723: 修复了 AIX 上的编译问题
NumPy 1.9.1 发布说明
这是 1.9.x 系列中仅进行错误修复的发布版本。
问题已解决
-
gh-5184: 恢复梯度的线性边缘行为,就像在 < 1.9 版本中一样。第二阶行为可通过 edge_order 关键字使用
-
gh-4007: 解决在 OSX 10.9 上加速 sgemv 导致崩溃的问题
-
gh-5100: 恢复从可迭代对象推断对象 dtype 而无需 len() 的行为
-
gh-5163: 避免 gcc-4.1.2 (red hat 5) 编译错误导致崩溃
-
gh-5138: 修复包含 inf 的数组上的 nanmedian
-
gh-5240: 修复使用 subok=False 设置时未返回输出数组的 ufuncs
-
gh-5203: 在 MaskedArray.array_finalize 中复制继承的掩码
-
gh-2317: genfromtxt 未正确处理 filling_values=0
-
gh-5067: 恢复 python2 中 npy_PyFile_DupClose 的 API
-
gh-5063: 无法将无效的序列索引转换为元组
-
gh-5082: 在 unicode 数组上使用 argmin() 时出现分段错误
-
gh-5095: 不要从 np.where 传播子类型
-
gh-5104: np.inner 在 SciPy 的稀疏矩阵上导致分段错误
-
gh-5251: fromarrays 在 unicode 数组上未使用正确格式的问题
-
gh-5136: 如果导入 threading 失败,则导入 dummy_threading
-
gh-5148: 在使用 Python 标志 ‘-OO’ 运行时使 numpy 导入
-
gh-5147: 特定顺序下的 Einsum 双收缩导致 ValueError
-
gh-479: 使 f2py 与 intent(in out) 一起工作
-
gh-5170: 使 python2 的 .npy 文件在 python3 中可读
-
gh-5027: 将 ‘ll’ 作为 long long 的默认长度说明符
-
gh-4896: 修复 MSVC 2013 中由于 C99 复杂支持导致的构建错误
-
gh-4465: 使 PyArray_PutTo 尊重 writeable 标志
-
gh-5225: 在未设置 dtype 的 datetime 上使用 arange 时修复崩溃
-
gh-5231: 修复在 c99 模式下构建的问题
问题已解决
-
gh-5184: 恢复梯度的线性边缘行为,就像在 < 1.9 版本中一样。第二阶行为可通过 edge_order 关键字使用
-
gh-4007: 解决在 OSX 10.9 上加速 sgemv 导致崩溃的问题
-
gh-5100: 恢复从可迭代对象推断对象 dtype 而无需 len() 的行为
-
gh-5163: 避免 gcc-4.1.2 (red hat 5) 编译错误导致崩溃
-
gh-5138: 修复包含 inf 的数组上的 nanmedian
-
gh-5240: 修复使用 subok=False 设置时未返回输出数组的 ufuncs
-
gh-5203: 在 MaskedArray.array_finalize 中复制继承的掩码
-
gh-2317: genfromtxt 未正确处理 filling_values=0
-
gh-5067: 恢复 python2 中 npy_PyFile_DupClose 的 API
-
gh-5063: 无法将无效的序列索引转换为元组
-
gh-5082: 在 unicode 数组上使用 argmin() 时出现分段错误
-
gh-5095: 不要从 np.where 传播子类型
-
gh-5104: np.inner 在 SciPy 的稀疏矩阵上导致分段错误
-
gh-5251: fromarrays 在 unicode 数组上未使用正确格式的问题
-
gh-5136: 如果导入 threading 失败,则导入 dummy_threading
-
gh-5148: 在使用 Python 标志 ‘-OO’ 运行时使 numpy 导入
-
gh-5147: 特定顺序下的 Einsum 双收缩导致 ValueError
-
gh-479: 使 f2py 与 intent(in out) 一起工作
-
gh-5170: 使 python2 的 .npy 文件在 python3 中可读
-
gh-5027: 使用‘ll’作为长长整型的默认长度限定符
-
gh-4896: 修复由于 C99 复数支持导致的 MSVC 2013 构建错误
-
gh-4465: 使 PyArray_PutTo 尊重可写标志
-
gh-5225: 修复在未设置 dtype 的情况下在日期时间上使用 arange 时崩溃的问题
-
gh-5231: 修复在 c99 模式下构建时的崩溃
NumPy 1.9.0 发布说明
该版本支持 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 中,这两种类型非常不同。
兼容性说明
对角线和 diag 函数返回只读视图。
在 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
选项,则输入仅部分排序而不是完全排序。
ndarray.tofile 异常类型
所有tofile
异常现在都是IOError
,以前有些是ValueError
。
无效的填充值异常
对 numpy.ma.core._check_fill_value 进行了两个更改:
-
当填充值为字符串且数组类型不是‘OSUV’之一时,会引发 TypeError 而不是使用默认填充值。
-
当填充值溢出数组类型时,会引发 TypeError 而不是 OverflowError。
多项式类不再从 PolyBase 派生
这可能会导致依赖于多项式类从 PolyBase 派生的人遇到问题。它们现在都是从抽象基类 ABCPolyBase 派生的。严格来说,应该涉及到弃用,但没有找到使用旧基类的外部代码。
使用 numpy.random.binomial 可能会改变 RNG 状态与 numpy < 1.9
已修复生成二项式随机变量算法中的一个错误。这个更改可能会改变执行的随机抽样次数,因此在调用 distribution.c::rk_binomial_btpe 后,序列位置将不同。任何依赖于 RNG 处于已知状态的测试应该被检查和/或更新。
随机种子强制为 32 位无符号整数
如果 np.random.seed
和 np.random.RandomState
的种子不能安全地转换为 32 位无符号整数,则现在会抛出 ValueError
。现在失败的应用程序可以通过将高 32 位值掩码为零来修复:seed = seed & 0xFFFFFFFF
。这在旧版本中是默默地完成的,因此随机流保持不变。
Argmin 和 argmax 的 out 参数
np.argmin
和 np.argmax
及其等效的 C-API 函数的 out
参数现在被检查以确保精确匹配所需的输出形状。如果检查失败,则会引发 ValueError
而不是 TypeError
。
Einsum
移除不必要的广播符号限制。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,非整数轴索引已被弃用。
promote_types
和字符串 dtype
当一个参数为整数或浮点 dtype,另一个参数为字符串 dtype 时,promote_types
函数现在返回有效的字符串长度。以前,即使输入的字符串 dtype 长度不足以存储转换为字符串的最大整数/浮点值,它总是返回输入的字符串 dtype。
can_cast
和字符串 dtype
如果字符串 dtype 的长度不足以存储转换为字符串的最大整数/浮点值,则can_cast
函数现在在“安全”转换模式下返回 False,对于整数/浮点 dtype 和字符串 dtype。以前,在“安全”模式下,can_cast
对于整数/浮点 dtype 和任何长度的字符串 dtype 返回 True。
astype 和字符串 dtype
如果要转换为的字符串 dtype 在“安全”转换模式下不足以容纳正在转换的整数/浮点数组的最大值,则astype
方法现在会返回错误。以前,即使结果被截断,也允许转换。
npyio.recfromcsv关键字参数已更改
npyio.recfromcsv不再接受未记录的update关键字,该关键字曾用于覆盖dtype关键字。
doc/swig
目录已移动
doc/swig
目录已移至tools/swig
。
npy_3kcompat.h
头文件已更改
未使用的simple_capsule_dtor
函数已从npy_3kcompat.h
中移除。请注意,此头文件不应在 numpy 之外使用;其他项目在需要时应使用自己的副本。
C-Api sq_item
和sq_ass_item
序列方法中的负索引
当直接访问sq_item
或sq_ass_item
PyObject 插槽以获取项目时,将不再支持负索引。然而,PySequence_GetItem
和PySequence_SetItem
可以修复负索引,以便在那里使用。
NDIter
现在调用NpyIter_RemoveAxis
时,迭代器范围将被重置。
当跟踪多索引并且迭代器没有被缓冲时,可以使用NpyIter_RemoveAxis
。在这种情况下,迭代器的大小可能会缩小。因为迭代器的总大小是有限的,在这些调用之前,迭代器可能会太大。在这种情况下,其大小将被设置为-1
,并且在构造时不会发出错误,而是在移除多索引、设置迭代器范围或获取下一个函数时发出错误。
这对当前工作的代码没有影响,但强调了如果这些条件可能发生时需要检查错误返回的必要性。在大多数情况下,被迭代的数组和迭代器一样大,因此不会出现这样的问题。
这个更改已经应用于 1.8.1 版本。
现在,对于字符串 dtype,zeros_like
将返回空字符串
为了匹配zeros函数,zeros_like现在返回一个用空字符串初始化的数组,而不是一个填充了*‘0’*的数组。
新特性
百分位数支持更多的插值选项
np.percentile
现在具有插值关键字参数,用于指定百分位数落在两个值之间时应如何插值。请查看文档以获取可用选项。
中位数和百分位数的通用轴支持
自 1.7 版本以来,np.median
和np.percentile
现在支持类似 ufunc reductions 的通用轴参数。现在可以使用 axis=(index, index)来选择要减少的轴列表。还添加了keepdims
关键字参数,以便将广播到原始形状的数组。
np.linspace
和np.logspace
中添加了 dtype 参数
现在可以使用 dtype 参数指定linspace
和logspace
函数返回的数据类型。
更通用的np.triu
和np.tril
广播
对于ndim
超过 2 的数组,这些函数现在将应用于最后两个轴,而不是引发异常。
tobytes
方法的别名为tostring
ndarray.tobytes
和MaskedArray.tobytes
已添加为tostring
的别名,用于将数组导出为bytes
。这在 Python 3 中更一致,因为str
和bytes
不相同。
构建系统
添加了对 ppc64le 和 OpenRISC 架构的实验性支持。
与 python numbers
模块的兼容性
所有数值 numpy 类型现在都在 python numbers
模块中注册了类型层次结构。
np.vander
中添加了increasing
参数
可以使用这个新的布尔参数指定范德蒙矩阵的列的顺序。
np.unique
中添加了unique_counts
参数
现在可以作为可选返回值获取输入中每个唯一项出现的次数。
nanfunctions 中支持中位数和百分位数。
np.nanmedian
和np.nanpercentile
函数的行为类似于中位数和百分位数函数,只是会忽略 NaN 值。
添加了 NumpyVersion 类。
当 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.cross
现在正确地广播其两个输入数组,即使它们具有不同的维度数量。在早期版本中,这可能会导致引发错误或计算错误的结果。
改进
在某些情况下,对 sum 的数值稳定性进行了改进。
sum 方法现在使用成对求和,但仅沿着快速轴,并且对长度<=8192 的值组进行。这也应该改善某些常见情况下 var 和 std 的准确性。
百分位数实现基于np.partition
。
np.percentile
已经实现为np.partition
,该方法仅通过选择算法部分排序数据。这将时间复杂度从O(nlog(n))
改进为O(n)
。
np.array
的性能改进。
使用np.array
将包含数组的列表转换为数组的性能已经改进。现在在速度上等同于np.vstack(list)
。
np.searchsorted
的性能改进。
对于内置数值类型,np.searchsorted
不再依赖于数据类型的compare
函数来执行搜索,而是通过特定类型的函数实现。根据输入的大小,这可能会带来超过 2 倍的性能改进。
np.distutils 的可选减少冗余度。
设置numpy.distutils.system_info.system_info.verbosity = 0
,然后调用numpy.distutils.system_info.get_info('blas_opt')
将不会在输出中打印任何内容。这主要是为了其他使用 numpy.distutils 的包。
在np.random.multivariate_normal
中进行协方差检查。
当协方差矩阵不是半正定时,会引发RuntimeWarning
警告。
多项式类不再基于模板。
多项式类已经重构为使用抽象基类而不是模板,以实现一个共同的接口。这使得导入多项式包更快,��为在导入时不需要编译类。
更多的 GIL 释放。
几个更多的函数现在释放全局解释器锁,允许使用 threading
模块更有效地并行化。特别是 GIL 现在会在 fancy indexing、np.where
和 random
模块中释放,现在使用每个状态锁而不是 GIL。
MaskedArray 对更复杂的基类的支持
内置的假设基类的行为类似于普通数组的假设正在被移除。特别是,repr
和 str
现在应该更可靠地工作。
C-API
弃用
非整数标量用于序列重复
使用非整数 numpy 标量重复 python 序列已被弃用。例如 np.float_(2) * [1]
将在未来出错。
select
输入已被弃用
对 select
的整数和空输入已被弃用。将来只有布尔数组将是有效条件,而空的 condlist
将被视为输入错误而不是返回默认值。
rank
函数
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。
C-API
实用函数 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 中,这两种类型非常不同。
兼容性说明
对角线和 diag 函数返回可写视图。
在 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
选项,则输入仅部分而不是完全排序。
ndarray.tofile 异常类型
所有 tofile
异常现在都是 IOError
,以前有些是 ValueError
。
无效填充值异常
对 numpy.ma.core._check_fill_value 进行了两个更改:
-
当填充值为字符串且数组类型不是 ‘OSUV’ 之一时,会引发 TypeError 而不是使用默认填充值。
-
当填充值溢出数组类型时,会引发 TypeError 而不是 OverflowError。
多项式类不再从 PolyBase 派生
这可能会导致依赖于多项式类从 PolyBase 派生的人遇到问题。它们现在都是从抽象基类 ABCPolyBase 派生的。严格来说,应该涉及弃用,但找不到使用旧基类的外部代码。
使用 numpy.random.binomial 可能会改变 RNG 状态与 numpy < 1.9 的情况。
已修复生成二项随机变量算法中的一个错误。此更改可能会改变执行的随机抽样数量,因此在调用 distribution.c::rk_binomial_btpe 后,序列位置将不同。任何依赖于 RNG 处于已知状态的测试应该进行检查和/或更新。
随机种子强制为 32 位无符号整数
np.random.seed
和 np.random.RandomState
现在如果种子不能安全地转换为 32 位无符号整数将抛出 ValueError
。现在失败的应用程序可以通过将高 32 位值掩码为零来修复:seed = seed & 0xFFFFFFFF
。这在旧版本中是默默地完成的,以便随机流保持不变。
Argmin
和 argmax
输出参数
np.argmin
和 np.argmax
及其等效的 C-API 函数的 out
参数现在会被检查以确保与期望的输出形状完全匹配。如果检查失败,将引发 ValueError
而不是 TypeError
。
Einsum
删除不必要的广播符号限制。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
promote_types
函数现在在给定整数或浮点 dtype 作为一个参数和字符串 dtype 作为另一个参数时返回有效的字符串长度。以前,即使输入的字符串 dtype 长度不足以存储转换为字符串的最大整数/浮点值,它也总是返回输入的字符串 dtype。
can_cast
和字符串 dtype
如果字符串 dtype 长度不足以存储转换为字符串的最大整数/浮点值,则can_cast
函数现在在“安全”转换模式下对整数/浮点 dtype 和字符串 dtype 返回 False。以前,在“安全”模式下,can_cast
对整数/浮点 dtype 和任何长度的字符串 dtype 返回 True。
astype 和字符串 dtype
如果要转换为的字符串 dtype 在“安全”转换模式下不足以容纳要转换的整数/浮点数组的最大值,则astype
方法现在会返回错误。以前,即使结果被截断,也允许进行转换。
npyio.recfromcsv关键字参数更改
npyio.recfromcsv不再接受未记录的update关键字,该关键字曾用于覆盖dtype关键字。
doc/swig
目录已移动
doc/swig
目录已移动到tools/swig
。
npy_3kcompat.h
头文件已更改
未使用的simple_capsule_dtor
函数已从npy_3kcompat.h
中删除。请注意,此头文件不应在 numpy 之外使用;其他项目在需要时应使用自己的文件副本。
C-API 中sq_item
和sq_ass_item
序列方法中的负索引
当直接访问sq_item
或sq_ass_item
PyObject 插槽以获取项目时,将不再支持负索引。然而,PySequence_GetItem
和PySequence_SetItem
修复了负索引,以便可以在那里使用它们。
NDIter
现在调用NpyIter_RemoveAxis
时,迭代器范围将被重置。
当跟踪多索引并且迭代器未被缓冲时,可以使用NpyIter_RemoveAxis
。在这种情况下,迭代器的大小可能会缩小。因为迭代器的总大小是有限的,在这些调用之前,迭代器可能会太大。在这种情况下,其大小将被设置为-1
,并且在构造时不会发出错误,而是在移除多索引、设置迭代器范围或获取下一个函数时发出错误。
这对当前正常工作的代码没有影响,但强调了如果这些条件可能发生时需要检查错误返回的必要性。在大多数情况下,被迭代的数组与迭代器一样大,因此不会出现这样的问题。
这个更改已经应用于 1.8.1 版本。
对于字符串 dtypes,zeros_like
现在返回空字符串
为了匹配zeros函数,zeros_like现在返回一个用空字符串初始化的数组,而不是一个填充了*‘0’*的数组。
对角线和 diag 函数返回只读视图。
在 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
选项,则输入只部分排序而不是完全排序。
ndarray.tofile 异常类型
所有tofile
异常现在都是IOError
,以前有些是ValueError
。
无效的填充值异常
numpy.ma.core._check_fill_value 的两个更改:
-
当填充值为字符串且数组类型不是‘OSUV’之一时,会引发 TypeError 而不是使用默认填充值。
-
当填充值溢出数组类型时,会引发 TypeError 而不是 OverflowError。
多项式类不再从 PolyBase 派生
这可能会导致依赖于多项式类从 PolyBase 派生的人遇到问题。它们现在都是从抽象基类 ABCPolyBase 派生的。严格来说,应该涉及到弃用,但找不到使用旧基类的外部代码。
使用 numpy.random.binomial 可能会改变 RNG 状态与 numpy < 1.9
已修复生成二项随机变量算法中的一个错误。此更改可能会改变执行的随机抽样数量,因此在调用 distribution.c::rk_binomial_btpe 后,序列位置将不同。任何依赖于 RNG 处于已知状态的测试应该被检查和/或更新。
随机种子强制为 32 位无符号整数
如果np.random.seed
和np.random.RandomState
的种子无法安全地转换为 32 位无符号整数,则现在会抛出ValueError
。现在失败的应用程序可以通过将高 32 位值屏蔽为零来修复:seed = seed & 0xFFFFFFFF
。这在旧版本中是默默地完成的,因此随机流保持不变。
Argmin 和 argmax 输出参数
np.argmin
和np.argmax
及其等效的 C-API 函数的out
参数现在被检查以确切匹配所需的输出形状。如果检查失败,则会引发ValueError
而不是TypeError
。
Einsum
删除不必要的广播符号限制。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 的非整数轴索引已被弃用。
promote_types
和字符串 dtype
当给定一个整数或浮点数 dtype 作为一个参数,另一个参数作为字符串 dtype 时,promote_types
函数现在返回一个有效的字符串长度。以前,即使输入的字���串 dtype 长度不足以存储转换为字符串的最大整数/浮点数值,它总是返回输入的字符串 dtype。
can_cast
和字符串 dtype
can_cast
函数现在在整数/浮点数 dtype 和字符串 dtype 的“安全”转换模式下返回 False,如果字符串 dtype 的长度不足以存储转换为字符串的最大整数/浮点数值。以前,在“安全”模式下,can_cast
对整数/浮点数 dtype 和任何长度的字符串 dtype 返回 True。
astype 和字符串 dtype
在“安全”转换模式下,如果要转换为的字符串 dtype 长度不足以容纳正在转换的整数/浮点数数组的最大值,则astype
方法现在会返回错误。以前,即使结果被截断,也允许转换。
npyio.recfromcsv关键字参数更改
npyio.recfromcsv不再接受未记录的update关键字,该关键字曾用于覆盖dtype关键字。
doc/swig
目录已移动
doc/swig
目录已移动到tools/swig
。
npy_3kcompat.h
头文件已更改
未使用的simple_capsule_dtor
函数已从npy_3kcompat.h
中删除。请注意,此头文件不应在 numpy 之外使用;其他项目应在需要时使用自己的副本。
C-Api 中的负索引sq_item
和sq_ass_item
序列方法
当直接访问sq_item
或sq_ass_item
PyObject 插槽以获取项目时,不再支持负索引。然而,PySequence_GetItem
和PySequence_SetItem
修复了负索引,以便在那里使用。
NDIter
当现在调用NpyIter_RemoveAxis
时,迭代器范围将被重置。
当跟踪多索引并且迭代器未被缓冲时,可以使用NpyIter_RemoveAxis
。在这种情况下,迭代器的大小可能会缩小。由于迭代器的总大小是有限的,在这些调用之前,迭代器可能会太大。在这种情况下,其大小将设置为-1
,并且在构造时不会发出错误,而是在删除多索引、设置迭代器范围或获取下一个函数时发出错误。
这对当前正常工作的代码没有影响,但强调了如果这些条件可能发生,则需要检查错误返回的必要性。在大多数情况下,被迭代的数组与迭代器一样大,因此不会出现这样的问题。
这个更改已经应用到了 1.8.1 版本。
对于字符串 dtype,zeros_like
现在返回空字符串
为了匹配zeros函数,zeros_like现在返回一个用空字符串初始化的数组,而不是一个填充有*‘0’*的数组。
新功能
百分位数支持更多的插值选项
np.percentile
现在具有插值关键字参数,用于指定如果百分位数落在两个值之间时应该如何插值点。请查看文档以获取可用选项。
中位数和百分位数的广义轴支持
np.median
和np.percentile
现在支持类似 ufunc reductions 的广义轴参数自 1.7 起。现在可以说 axis=(index, index)来选择一个用于缩减的轴列表。还添加了keepdims
关键字参数,以便方便地广播到原始形状的数组。
np.linspace
和np.logspace
添加了 dtype 参数
现在可以使用 dtype 参数指定linspace
和logspace
函数返回的数据类型。
更通用的np.triu
和np.tril
广播
对于ndim
超过 2 的数组,这些函数现在将应用于最后两个轴,而不是引发异常。
tobytes
方法的别名为tostring
ndarray.tobytes
和MaskedArray.tobytes
已添加为tostring
的别名,用于将数组导出为bytes
。这在 Python 3 中更一致,因为str
和bytes
不相同。
构建系统
增加了对 ppc64le 和 OpenRISC 架构的实验性支持。
兼容性到 python 的numbers
模块
所有数值 numpy 类型现在都在 python 的numbers
模块中注册到类型层次结构中。
np.vander
添加了increasing
参数
可以使用这个新的布尔参数指定 Vandermonde 矩阵的列的顺序。
np.unique
添加了unique_counts
参数
现在可以作为可选返回值获得输入中每个唯一项出现的次数。
在 nanfunctions 中支持中位数和百分位数
np.nanmedian
和np.nanpercentile
函数的行为类似于中位数和百分位数函数,只是忽略 NaN。
添加了 NumpyVersion 类
当 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.cross
现在正确地广播其两个输入数组,即使它们具有不同的维度数量。在早期版本中,这将导致引发错误或计算错误的结果。
百分位数支持更多的插值选项
np.percentile
现在具有插值关键字参数,用于指定如果百分位数落在两个值之间时应该如何插值点。请查看文档以获取可用选项。
中位数和百分位数的广义轴支持
np.median
和 np.percentile
现在支持类似于 ufunc reductions 的广义轴参数,自 1.7 版本开始。现在可以使用 axis=(index, index) 来选择要减少的轴列表。keepdims
关键字参数也被添加,以便方便地广播到原始形状的数组。
np.linspace
和 np.logspace
添加了 Dtype 参数。
现在可以使用 dtype ���数指定 linspace
和 logspace
函数返回的数据类型。
更一般的 np.triu
和 np.tril
广播。
对于 ndim
超过 2 的数组,这些函数现在将应用于最后两个轴,而不是引发异常。
tobytes
是 tostring
方法的别名。
ndarray.tobytes
和 MaskedArray.tobytes
已添加为 tostring
的别名,用于将数组导出为 bytes
。这在 Python 3 中更一致,因为 str
和 bytes
不相同。
构建系统
添加了对 ppc64le 和 OpenRISC 架构的实验性支持。
与 python numbers
模块的兼容性
所有数值 numpy 类型现在都在 python numbers
模块中注册。
np.vander
添加了 increasing
参数。
可以使用这个新的布尔参数指定范德蒙德矩阵的列的顺序。
np.unique
添加了 unique_counts
参数。
现在可以作为可选返回值获取输入中每个唯一项出现的次数。
nanfunctions 中支持中位数和百分位数。
np.nanmedian
和 np.nanpercentile
函数的行为类似于中位数和百分位数函数,只是会忽略 NaN 值。
添加了 NumpyVersion 类。
当 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.cross
现在正确地广播其两个输入数组,即使它们具有不同数量的维度。在早期版本中,这将导致引发错误或计算错误的结果。
改进
在某些情况下,对于 sum 的更好数值稳定性。
现在在 sum 方法中使用成对求和,但仅沿着快速轴和长度小于等于 8192 的值组。这也应该改善某些常见情况下 var 和 std 的准确性。
百分位数是基于 np.partition
实现的。
np.percentile
是基于 np.partition
实现的,它只通过选择算法部分排序数据。这将时间复杂度从 O(nlog(n))
改进为 O(n)
。
np.array
的性能改进。
使用np.array
将包含数组的列表转换为数组的性能已经得到改进。现在在速度上等同于np.vstack(list)
。
np.searchsorted
的性能改进
对于内置数值类型,np.searchsorted
不再依赖于数据类型的compare
函数来执行搜索,而是现在由特定类型的函数实现。根据输入的大小,这可能导致性能提升超过 2 倍。
np.distutils 的可选减少冗余性
设置numpy.distutils.system_info.system_info.verbosity = 0
,然后调用numpy.distutils.system_info.get_info('blas_opt')
将不会在输出中打印任何内容。这主要是为了其他使用 numpy.distutils 的包。
np.random.multivariate_normal
中的协方差检查
当协方差矩阵不是半正定时,会引发RuntimeWarning
警告。
多项式类不再基于模板
多项式类已经重构为使用抽象基类而不是模板,以实现一个公共接口。这使得导入多项式包更快,因为在导入时不需要编译类。
更多的 GIL 释放
现在有更多函数释放全局解释器锁,允许使用threading
模块更有效地并行化。最值得注意的是现在对花式索引、np.where
和random
模块释放了 GIL,现在使用每个状态锁而不是 GIL。
更复杂基类的 MaskedArray 支持
内置假设基类的行为类似于普通数组的假设正在被移除。特别是,repr
和str
现在应该更可靠地工作。
C-API
在某些情况下,对 sum 的数值稳定性更好
现在在 sum 方法中使用了 Pairwise summation,但仅沿着快速轴,并且对长度<=8192 的值组使用。这也应该改善一些常见情况下 var 和 std 的准确性。
以np.partition
实现的百分位数
np.percentile
已经实现为np.partition
,它只通过选择算法部分排序数据。这将时间复杂度从O(nlog(n))
改进为O(n)
。
np.array
的性能改进
使用np.array
将包含数组的列表转换为数组的性能已经得到改进。现在在速度上等同于np.vstack(list)
。
np.searchsorted
的性能改进
对于内置数值类型,np.searchsorted
不再依赖于数据类型的compare
函数来执行搜索,而是现在由特定类型的函数实现。根据输入的大小,这可能导致性能提升超过 2 倍。
np.distutils 的可选减少冗余性
设置numpy.distutils.system_info.system_info.verbosity = 0
,然后调用numpy.distutils.system_info.get_info('blas_opt')
将不会在输出中打印任何内容。这主要是为了其他使用 numpy.distutils 的包。
np.random.multivariate_normal
中的协方差检查
当协方差矩阵不是半正定时,会引发RuntimeWarning
警告。
多项式类不再基于模板
多项式类已经重构,使用抽象基类而不是模板,以实现一个通用接口。这使得导入多项式包更快,因为在导入时不需要编译这些类。
更多 GIL 释放
现在有几个函数释放全局解释器锁,允许使用threading
模块更有效地并行化。特别是现在对花式索引、np.where
和random
模块释放了 GIL,现在使用每个状态锁而不是 GIL。
MaskedArray 对更复杂的基类的支持
内置假设基类的行为类似于普通数组的假设正在被移除。特别是,repr
和str
现在应该更可靠地工作。
C-API
弃用
序列重复的非整数标量
使用非整数 numpy 标量重复 python 序列已被弃用。例如,np.float_(2) * [1]
将在将来引发错误。
select
输入的弃用
对select
的整数和空输入已被弃用。将来只有布尔数组将是有效条件,而空的condlist
将被视为输入错误,而不是返回默认值。
rank
函数
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。
所有这些更改目前将产生弃用或未来警告。
C-API
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
输入的弃用
对select
的整数和空输入已被弃用。将来只有布尔数组将是有效条件,而空的condlist
将被视为输入错误,而不是返回默认值。
rank
函数
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。
C-API
实用函数 npy_PyFile_Dup 和 npy_PyFile_DupClose 受到 Python 3 对其文件对象应用的内部缓冲的影响而出现问题。为了解决这个问题,在 npy_3kcompat.h 中声明了两个新函数 npy_PyFile_Dup2 和 npy_PyFile_DupClose2,并弃用了旧函数。由于这些函数的脆弱性,建议尽可能使用 Python API。
这个改变已经应用于 1.8.1 版本。
NumPy 1.8.2 发布说明
这是 1.8.x 系列中仅修复错误的发布版本。
问题已解决
-
gh-4836: partition 在相等范围内进行多次选择时产生错误的结果
-
gh-4656: 使 fftpack._raw_fft 线程安全
-
gh-4628: _copyto 在 np.nanmax、np.nanmin 中的参数顺序不正确
-
gh-4642: 在转换带字段的数据类型时保持 GIL
-
gh-4733: 修复 np.linalg.svd(b, compute_uv=False)
-
gh-4853: 避免在 i386 上对规约进行未对齐的 simd 加载
-
gh-4722: 修复将空字符串转换为对象时的段错误
-
gh-4613: 修复 array_richcompare 中缺少的 NULL 检查
-
gh-4774: 避免对分块字节交换进行未对齐访问
-
gh-650: 在从某些缓冲区创建数组时防止除以零
-
gh-4602: ifort 在优化标志 O2 上存在问题,使用 O1
问题已解决
-
gh-4836: partition 在相等范围内进行多次选择时产生错误的结果
-
gh-4656: 使 fftpack._raw_fft 线程安全
-
gh-4628: _copyto 在 np.nanmax、np.nanmin 中的参数顺序不正确
-
gh-4642: 在转换带字段的数据类型时保持 GIL
-
gh-4733: 修复 np.linalg.svd(b, compute_uv=False)
-
gh-4853: 避免在 i386 上对规约进行未对齐的 simd 加载
-
gh-4722: 修复将空字符串转换为对象时的段错误
-
gh-4613: 修复 array_richcompare 中缺少的 NULL 检查
-
gh-4774: 避免对分块字节交换进行未对齐访问
-
gh-650: 在从某些缓冲区创建数组时防止除以零
-
gh-4602: ifort 在优化标志 O2 上存在问题,使用 O1
NumPy 1.8.1 发布说明
这是 1.8.x 系列中仅修复错误的发布。
问题已解决
-
gh-4276: 修复了对象数组的 mean、var、std 方法
-
gh-4262: 移除了不安全的 mktemp 使用
-
gh-2385: complex(inf)的绝对值在 python3 中引发无效警告
-
gh-4024: 序列赋值在形状不匹配时不会引发异常
-
gh-4027: 修复了对长于 BUFFERSIZE 的字符串进行分块读取
-
gh-4109: 修复了 0 维数组索引的对象标量返回类型
-
gh-4018: 修复了 ufunc 中内存分配失败的缺失检查
-
gh-4156: 高阶 linalg.norm 丢弃了复数数组的虚部
-
gh-4144: linalg: norm 在 longdouble、signed int 上失败
-
gh-4094: 修复了 _strided_to_strided_string_to_datetime 中的 NaT 处理
-
gh-4051: 修复了 _strided_to_strided_string_to_datetime 中的未初始化使用
-
gh-4093: 在 Python 2.6.6 下加载压缩的.npz 文件失败
-
gh-4138: 在 Python 3.4 中,非本机字节序 memoryview 导致段错误
-
gh-4123: 修复了 lexsort 中缺失的 NULL 检查
-
gh-4170: 修复了在 memoryviews 中仅本机长长检查
-
gh-4187: 修复了 32 位大文件支持
-
gh-4152: fromfile: 确保 python3 中文件句柄位置同步
-
gh-4176: clang 兼容性: 转换工具中的拼写错误
-
gh-4223: 获取非整数项导致数组返回
-
gh-4197: 修复了 memoryview 失败情况下的轻微内存泄漏
-
gh-4206: 修复了与单线程 Python 的构建
-
gh-4220: 在 ufunc.at 文档字符串中添加 versionadded:: 1.8.0
-
gh-4267: 改进了内存分配失败的处理
-
gh-4267: ���复了 ufunc.at 中在没有 gil 的情况下使用 capi
-
gh-4261: 检测 GNU 编译器的供应商版本
-
gh-4253: IRR 返回 nan 而不是有效的负答案
-
gh-4254: 修复了对字节数组不必要的字节顺序标志更改
-
gh-3263: numpy.random.shuffle 破坏了 MaskedArray 的掩码
-
gh-4270: np.random.shuffle 无法处理灵活数据类型
-
gh-3173: random.multinomial 的‘size’参数导致分段错误
-
gh-2799: 允许使用复杂列表进行唯一性处理
-
gh-3504: 修复了整数数组标量的 linspace 截断
-
gh-4191: get_info(‘openblas’)无法读取 libraries 键
-
gh-3348: _descriptor_from_pep3118_format 中的访问冲突
-
gh-3175: 从 bytearray 中使用 numpy.array()导致分段错误
-
gh-4266: histogramdd - 对于非常接近最后边界的条目,结果错误
-
gh-4408: 修复了对象数组的 stride_stricks.as_strided 函数
-
gh-4225: 修复了在 Windows 编译器构建中对 np.inf 的 log1p 和 exmp1 返回
-
gh-4359: 修复了 flex 数组中 str.format 的无限递归
-
gh-4145: 使用指数运算符时广播结果的形状不正确
-
gh-4483: 修复了{dot,multiply,inner}(scalar, matrix_of_objs)的可交换性
-
gh-4466: 当大小可能会改变时,延迟 npyiter 大小检查
-
gh-4485: 缓冲步幅错误地标记为固定
-
gh-4354: byte_bounds 在 datetime dtypes 中失败
-
gh-4486: 从/到高精度 datetime64 对象的转换导致段错误/错误
-
gh-4428: einsum(None, None, None, None)导致分段错误
-
gh-4134: 对于大小为 1 的对象缩减未初始化使用
变更
NDIter
当现在调用NpyIter_RemoveAxis
时,迭代器范围将被重置。
当跟踪多索引并且迭代器未缓冲时,可以使用NpyIter_RemoveAxis
。在这种情况下,迭代器的大小可能会缩小。由于迭代器的总大小是有限的,因此在这些调用之前,迭代器可能会过大。在这种情况下,其大小将被设置为-1
,并且不是在构建时而是在移除多索引、设置迭代器范围或获取下一个函数时发出错误。
这对当前正常工作的代码没有影响,但强调了如果这些情况可能发生时检查错误返回的必要性。在大多数情况下,被迭代的数组与迭代器一样大,因此不会出现这样的问题。
可选减少np.distutils
的冗长输出
设置numpy.distutils.system_info.system_info.verbosity = 0
,然后调用numpy.distutils.system_info.get_info('blas_opt')
将不会在输出中打印任何内容。这主要是为了其他使用numpy.distutils
的包。
弃用
C-API
实用函数npy_PyFile_Dup
和npy_PyFile_DupClose
被 Python 3 对其文件对象应用的内部缓冲破坏了。为了解决这个问题,在npy_3kcompat.h
中声明了两个新函数npy_PyFile_Dup2
和npy_PyFile_DupClose2
,并弃用了旧函数。由于这些函数的脆弱性,建议尽可能使用 Python API 来代替。
问题已解决
-
gh-4276: 修复对象数组的
mean
、var
、std
方法 -
gh-4262: 移除不安全的
mktemp
使用 -
gh-2385:
complex(inf)
的绝对值在 Python 3 中引发无效警告 -
gh-4024: 序列赋值在形状不匹配时不会引发异常
-
gh-4027: 修复对长于
BUFFERSIZE
的字符串进行分块读取的问题 -
gh-4109: 修复 0 维数组索引的对象标量返回类型
-
gh-4018: 修复 ufunc 中对内存分配失败的缺失检查
-
gh-4156: 高阶
linalg.norm
丢弃了复数数组的虚部 -
gh-4144:
linalg.norm
在longdouble
、signed int
上失败 -
gh-4094: 修复在
_strided_to_strided_string_to_datetime
中对 NaT 的处理 -
gh-4051: 修复在
_strided_to_strided_string_to_datetime
中未初始化使用的问题 -
gh-4093: 在 Python 2.6.6 下加载压缩的
.npz
文件失败 -
gh-4138: 在 Python 3.4 中使用非本机字节序
memoryview
导致段错误 -
gh-4123: 修复
lexsort
中缺少的 NULL 检查 -
gh-4170: 修复在
memoryviews
中仅本机长长检查的问题 -
gh-4187: 修复 32 位系统上的大文件支持
-
gh-4152:
fromfile
:确保在 Python 3 中文件句柄位置同步 -
gh-4176: clang 兼容性:
conversion_utils
中的拼写错误 -
gh-4223: 获取非整数项导致数组返回
-
gh-4197: 修复
memoryview
失败情况下的轻微内存泄漏 -
gh-4206: 修复与单线程 Python 的构建问题
-
gh-4220: 在
ufunc.at
文档字符串中添加versionadded:: 1.8.0
-
gh-4267: 改进内存分配失败的处理
-
gh-4267: 修复在
ufunc.at
中无 GIL 使用 CAPI 的问题 -
gh-4261: 检测 GNU 编译器的供应商版本
-
gh-4253: IRR 返回 nan 而不是有效的负答案
-
gh-4254: 修复字节数组不必要的字节顺序标志更改
-
gh-3263: numpy.random.shuffle 破坏了 MaskedArray 的掩码
-
gh-4270: np.random.shuffle 无法与灵活的 dtypes 一起使用
-
gh-3173: ‘size’ 参数传递给 random.multinomial 时出现分段错误
-
gh-2799: 允许对复数列表使用唯一性
-
gh-3504: 修复整数数组标量的 linspace 截断
-
gh-4191: get_info(‘openblas’) 未读取库键
-
gh-3348: _descriptor_from_pep3118_format 中的访问冲突
-
gh-3175: 使用 numpy.array() 从 bytearray 时出现分段错误
-
gh-4266: histogramdd - 对于非常接近最后边界的条目,结果错误
-
gh-4408: 修复对象数组的 stride_stricks.as_strided 函数
-
gh-4225: 修复 np.inf 在 Windows 编译器构建上的 log1p 和 exmp1 返回
-
gh-4359: 修复灵活数组的 str.format 中的无限递归
-
gh-4145: 使用指数运算符时广播结果的形状不正确
-
gh-4483: 修复 {dot,multiply,inner}(scalar, matrix_of_objs) 的交换性
-
gh-4466: 当大小可能会改变时,延迟 npyiter 大小检查
-
gh-4485: 缓冲的步幅错误地标记为固定
-
gh-4354: byte_bounds 与日期时间 dtypes 失败
-
gh-4486: 从/到高精度 datetime64 对象的转换导致段错误/错误
-
gh-4428: einsum(None, None, None, None) 导致段错误
-
gh-4134: 未初始化使用大小为 1 的对象缩减
变更
NDIter
当现在调用 NpyIter_RemoveAxis
时,迭代器范围将���重置。
当跟踪多索引并且迭代器未缓冲时,可以使用 NpyIter_RemoveAxis
。在这种情况下,迭代器的大小可能会缩小。由于迭代器的总大小受限,因此在这些调用之前,迭代器可能太大。在这种情况下,其大小将设置为 -1
,并且在构造时不会发出错误,而是在删除多索引、设置迭代器范围或获取下一个函数时发出错误。
这对当前正常工作的代码没有影响,但强调了如果这些条件可能发生时需要检查错误返回的必要性。在大多数情况下,被迭代的数组与迭代器一样大,因此不会出现这样的问题。
可选减少 np.distutils 的冗长
设置 numpy.distutils.system_info.system_info.verbosity = 0
,然后调用 numpy.distutils.system_info.get_info('blas_opt')
将不会在输出中打印任何内容。这主要是为了其他使用 numpy.distutils 的包。
NDIter
当现在调用 NpyIter_RemoveAxis
时,迭代器范围将被重置。
当跟踪多索引并且迭代器未缓冲时,可以使用 NpyIter_RemoveAxis
。在这种情况下,迭代器的大小可能会缩小。由于迭代器的总大小受限,因此在这些调用之前,迭代器可能太大。在这种情况下,其大小将设置为 -1
,并且在构造时不会发出错误,而是在删除多索引、设置迭代器范围或获取下一个函数时发出错误。
这对当前正常工作的代码没有影响,但强调了如果这些条件可能发生时需要检查错误返回的必要性。在大多数情况下,被迭代的数组与迭代器一样大,因此不会出现这样的问题。
可选减少 np.distutils 的冗长
设置 numpy.distutils.system_info.system_info.verbosity = 0
,然后调用 numpy.distutils.system_info.get_info('blas_opt')
将不会在输出中打印任何内容。这主要是为了其他使用 numpy.distutils 的包。
弃用
C-API
实用函数 npy_PyFile_Dup 和 npy_PyFile_DupClose 受到 Python 3 对其文件对象应用的内部缓冲的影响而出现问题。为了解决这个问题,在 npy_3kcompat.h 中声明了两个新函数 npy_PyFile_Dup2 和 npy_PyFile_DupClose2,并弃用了旧函数。由于这些函数的脆弱性,建议尽可能使用 Python API。
C-API
实用函数 npy_PyFile_Dup 和 npy_PyFile_DupClose 受到 Python 3 对其文件对象应用的内部缓冲的影响而出现问题。为了解决这个问题,在 npy_3kcompat.h 中声明了两个新函数 npy_PyFile_Dup2 和 npy_PyFile_DupClose2,并弃用了旧函数。由于这些函数的脆弱性,建议尽可能使用 Python API。
NumPy 1.8.0 发布说明
本次发布支持 Python 2.6 - 2.7 和 3.2 - 3.3。
亮点
-
新的,无需 2to3,Python 2 和 Python 3 由一个共同的代码库支持。
-
新的,用于线性代数的 gufuncs,使堆叠数组上的操作成为可能。
-
新的,使用
.at
方法的 ufunc 的原地花式索引。 -
新的,
partition
函数,通过选择进行部分排序以获得快速中位数。 -
新的,
nanmean
,nanvar
和nanstd
函数跳过 NaN。 -
新的,
full
和full_like
函数用于创建值初始化的数组。 -
新的,
PyUFunc_RegisterLoopForDescr
,更好地支持用户数据类型的 ufunc。 -
在许多领域进行了大量性能改进。
已停止支持
已停止支持 Python 版本 2.4 和 2.5。
已移除对 SCons 的支持。
未来的变化
在此版本中,Datetime64 类型仍处于实验阶段。在 1.9 版本中可能会有一些更改以使其更易于使用。
目前的对角线方法返回一个新数组并引发 FutureWarning。在 1.9 版本中,它将返回一个只读视图。
从结构化类型数组中进行多字段选择目前返回一个新数组并引发 FutureWarning。在 1.9 版本中,它将返回一个只读视图。
numpy/oldnumeric 和 numpy/numarray 兼容性模块将在 1.9 版本中被移除。
兼容性说明
doc/sphinxext 内容已移至自己的 github 存储库,并作为 numpy 的子模块包含在其中。请参阅 doc/HOWTO_BUILD_DOCS.rst 中的说明以访问内容。
numpy.void 标量的哈希函数已更改。以前,数据指针被哈希为整数。现在,哈希函数使用元组哈希算法来组合标量元素的哈希函数,但仅当标量是只读时。
Numpy 已将其构建系统默认切换为使用‘separate compilation’。在以前的版本中,这是受支持的,但不是默认的。这应该产生与旧系统相同的结果,但如果您尝试做一些复杂的事情,比如静态链接 numpy 或使用不寻常的编译器,那么可能会遇到问题。如果是这样,请报告一个 bug,并且作为临时解决方法,您可以通过导出 shell 变量 NPY_SEPARATE_COMPILATION=0 来重新启用旧的构建系统。
对于 AdvancedNew 迭代器,oa_ndim
标志现在应为 -1,表示不传递 op_axes
和 itershape
。现在,oa_ndim == 0
情况表示一个 0-D 迭代,op_axes
为 NULL,旧用法已被弃用。这不影响 NpyIter_New
或 NpyIter_MultiNew
函数。
函数 nanargmin
和 nanargmax
现在在所有-NaN 切片中返回 np.iinfo[‘intp’].min 作为索引。以前,这些函数对于数组返回会引发 ValueError,对于标量返回会引发 NaN。
NPY_RELAXED_STRIDES_CHECKING
新的编译时环境变量NPY_RELAXED_STRIDES_CHECKING
。如果将此变量设置为 1,则 numpy 将考虑更多数组为 C-或 F-连续的情况 - 例如,现在可以同时将列向量视为 C-和 F-连续。新的定义更准确,允许更快速的代码,减少不必要的复制,并简化 numpy 内部的代码。但是,这也可能破坏对 C-和 F-连续数组的步幅值做出过于强烈假设的第三方库。(目前已知这会破坏使用 memoryviews 的 Cython 代码,这将在 Cython 中修复。)这将在未来的发布中成为默认设置,请立即使用以下方式测试您的代码与使用 NUMPY 构建的代码:
NPY_RELAXED_STRIDES_CHECKING=1 python setup.py install
您可以通过运行以下命令来检查 NPY_RELAXED_STRIDES_CHECKING 是否生效:
np.ones((10, 1), order="C").flags.f_contiguous
如果启用了放松的步幅检查,则为True
,否则为False
。到目前为止,我们看到的典型问题是使用 C 代码处理 C 连续数组,并假设可以通过查看PyArray_STRIDES(arr)
数组中的最后一个元素来访问 itemsize。当启用放松的步幅时,这是不正确的(实际上,在某些极端情况下从未正确)。而应使用PyArray_ITEMSIZE(arr)
。
欲了解更多信息,请查看文档中的“ndarray 的内部内存布局”部分。
二进制操作的第二个参数为非数组时
二进制操作形式为<array-or-subclass> * <non-array-subclass>
,其中<non-array-subclass>
声明的__array_priority__
高于<array-or-subclass>
,现在将无条件返回NotImplemented,给予<non-array-subclass>
处理该操作的机会。之前,只有在<non-array-subclass>
实际实现了反向操作,并且尝试了对<non-array-subclass>
进行(可能昂贵的)数组转换后,才会返回NotImplemented。(bug, pull request)
使用overwrite_input选项的函数median仅部分排序数组
如果使用overwrite_input选项与median一起使用,则输入数组现在将仅部分排序而不是完全排序。
修复了 financial.npv
npv 函数存在一个错误。与文档所述相反,它从索引1
到M
而不是从0
到M - 1
求和。修复更改了返回值。mirr 函数调用了 npv 函数,但解决了问题,因此也进行了修复,并且 mirr 函数的返回值保持不变。
比较 NaN 数字时的运行时警告
比较浮点数NaN
现在会引发invalid
运行时警告。如果预期有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.]]])
针对 ufunc 的原地花式索引
函数at
已添加到 ufunc 对象中,允许在使用花式索引时进行原地 ufunc 操作而无需缓冲。例如,以下操作将增加数组中的第一个和第二个项目,并将第三个项目增加两次:numpy.add.at(arr, [0, 1, 2, 2], 1)
这是许多人错误认为arr[[0, 1, 2, 2]] += 1
会做的事情,但实际上不会,因为arr[2]
的增量值只是简单地复制到arr
的第三个槽位两次,而不是增加两次。
新函数partition和argpartition
通过选择算法部分排序数组的新函数。
通过索引k
进行分区将k
个最小元素移动到数组的前面。然后k
之前的所有元素都小于或等于位置k
处的值,而k
之后的所有元素都大于或等于位置k
处的值。这些边界内的值的排序是未定义的。可以提供一系列索引来一次性将它们全部排序到其排序位置,这可以用于高效地获取样本的中位数或百分位数等顺序统计量。partition
具有线性时间复杂度为O(n)
,而完全排序的时间复杂度为O(n log(n))
。
新函数nanmean、nanvar和nanstd
新增了 nan 感知统计函数。在这些函数中,结果是如果从所有计算中省略 nan 值后获得的结果。
新函数full和full_like
新的便利函数用于创建填充特定值的数组;与现有的zeros和zeros_like函数相辅相成。
与大文件的 IO 兼容性
大于 2GB 的大型 NPZ 文件可以在 64 位系统上加载。
针对 OpenBLAS 的构建
现在可以通过编辑 site.cfg 来构建针对 OpenBLAS 的 numpy。
新常数
欧拉常数现在在 numpy 中作为 euler_gamma 暴露出来。
qr 的新模式
qr 分解新增了‘complete’、‘reduced’和‘raw’三种模式,旧的‘full’和‘economic’模式已被弃用。‘reduced’模式取代了旧的‘full’模式,并且是默认模式,因此可以通过不指定模式来保持向后兼容性。
‘complete’模式返回完整维度的分解,可用于获取正交补空间的基础。‘raw’模式返回包含 Householder 反射器和缩放因子的数组,可用于将来应用 q 而无需转换为矩阵。‘economic’模式已被弃用,几乎没有什么用处,也不比‘raw’模式更有效率。
in1d新增了invert参数
函数in1d现在接受一个invert参数,当为True时,返回的数组将被反转。
使用np.newaxis进行高级索引
现在可以在索引数组中使用np.newaxis/None,而不仅仅是在简单索引中。这意味着array[np.newaxis, [0, 1]]
现在可以按预期工作,并选择前两行,同时在数组前添加一个新轴。
C-API
现在可以使用内置输入类型和自定义输出类型注册新的 ufuncs。在此更改之前,当从 Python 调用 ufunc 时,NumPy 无法找到正确的 ufunc 循环函数,因为 ufunc 循环签名匹配逻辑没有查看输出操作数类型。现在只要用户提供具有正确输出类型的输出参数,就可以找到正确的 ufunc 循环。
runtests.py
添加了一个简单的测试运行脚本runtests.py
。它还通过setup.py build
构建 Numpy,并可在开发过程中轻松运行测试。
改进
IO 性能改进
通过分块改进了读取大文件的性能(另请参阅 IO 兼容性)。
pad的性能改进
pad函数有一个新的实现,大大提高了所有输入的性能,除了mode=(保留了向后兼容性)。对于 rank >= 4,随着维度的增加,性能得到了显著改善。
isnan、isinf、isfinite和byteswap的性能改进
isnan、isinf、isfinite和byteswap已经改进,利用编译器内置功能避免了对 libc 的昂贵调用。这将在 gnu libc 系统上将这些操作的性能提高约两倍。
通过 SSE2 矢量化实现性能改进
几个函数已经经过优化,以利用 SSE2 CPU SIMD 指令。
-
Float32 和 float64:
-
基本数学(加法、减法、除法、乘法)
-
平方根
-
最小值/最大值
-
绝对值
-
-
布尔:
-
逻辑或
-
逻辑与
-
逻辑非
-
这将使这些操作的性能提高至多 4 倍/2 倍(对于 float32/float64),并且取决于数据在 CPU 缓存中的位置,对于 bool 类型的性能提高最多可达 10 倍。对于原地操作,性能提升最大。
为了使用改进的函数,必须在编译时启用 SSE2 指令集。在 x86_64 系统上,默认启用它。在具有能力的 CPU 的 x86_32 上,必须通过向 CFLAGS 构建变量传递适当的标志(使用 gcc 时为-msse2)来启用它。
中位数的性能改进
中位数现在是基于partition而不是sort实现的,这将其时间复杂度从 O(n log(n))降低到 O(n)。如果与overwrite_input选项一起使用,则数组现在只会部分排序而不是完全排序。
ufunc C-API 中可覆盖的操作数标志
在创建 ufunc 时,可以通过 ufunc 对象的新 op_flags 属性覆盖默认的 ufunc 操作数标志。例如,要将第一个输入的操作数标志设置为读/写:
PyObject *ufunc = PyUFunc_FromFuncAndData(…); ufunc->op_flags[0] = NPY_ITER_READWRITE;
这允许 ufunc 在原地执行操作。此外,全局 nditer 标志可以通过 ufunc 对象的新 iter_flags 属性进行覆盖。例如,要为 ufunc 设置 reduce 标志:
ufunc->iter_flags = NPY_ITER_REDUCE_OK;
更改
一般
函数 np.take 现在允许 0 维数组作为索引。
现在默认启用了分离编译模式。
对 np.insert 和 np.delete 进行了几处更改:
-
以前,负索引和指向数组末尾的索引会被简单地忽略。现在,这将引发一个 Future 或 Deprecation Warning。将来,它们将像正常索引处理它们一样处理 - 负索引将会循环,超出边界的索引将生成错误。
-
以前,布尔索引被视为整数(始终指向数组中的第 0 或第 1 项)。将来,它们将被视为掩码。在此版本中,它们引发一个 FutureWarning 警告,指出即将发生的更改。
-
在 Numpy 1.7 中,np.insert 已经允许语法np.insert(arr, 3, [1,2,3])在单个位置插入多个项目。在 Numpy 1.8 中,这也适用于np.insert(arr, [3], [1, 2, 3])。
从 np.pad 中的填充区域现在正确地四舍五入,而不是截断。
C-API Array Additions
数组 C-API 中添加了四个新函数。
-
PyArray_Partition
-
PyArray_ArgPartition
-
PyArray_SelectkindConverter
-
PyDataMem_NEW_ZEROED
C-API Ufunc Additions
数组 C-API 中添加了一个新函数,允许使用 descr 为用户类型注册内部循环。
- PyUFunc_RegisterLoopForDescr
C-API 开发者改进
PyArray_Type
实例创建函数tp_new
现在使用tp_basicsize
来确定分配多少内存。在之前的版本中,只分配了sizeof(PyArrayObject)
字节的内存,通常需要 C-API 子类型重新实现tp_new
。
弃用
qr 分解的‘full’和‘economic’模式已被弃用。
一般
已弃用使用非整数作为索引和大多数整数参数。以前,浮点索引和函数参数(如轴或形状)会被截断为整数而不发出警告。例如*arr.reshape(3., -1)或arr[0.]*将在 NumPy 1.8 中触发弃用警告,并且在将来的某个 NumPy 版本中它们将引发错误。
作者
此版本包含以下至少贡献了一个补丁的人员的工作。这些名称按名字的字母顺序排列:
-
87
-
Adam Ginsburg +
-
Adam Griffiths +
-
Alexander Belopolsky +
-
Alex Barth +
-
Alex Ford +
-
Andreas Hilboll +
-
Andreas Kloeckner +
-
Andreas Schwab +
-
Andrew Horton +
-
argriffing +
-
Arink Verma +
-
Bago Amirbekian +
-
Bartosz Telenczuk +
-
bebert218 +
-
Benjamin Root +
-
Bill Spotz +
-
Bradley M. Froehle
-
Carwyn Pelley +
-
Charles Harris
-
Chris
-
Christian Brueffer +
-
Christoph Dann +
-
Christoph Gohlke
-
Dan Hipschman +
-
Daniel +
-
Dan Miller +
-
daveydave400 +
-
David Cournapeau
-
David Warde-Farley
-
Denis Laxalde
-
dmuellner +
-
Edward Catmur +
-
Egor Zindy +
-
endolith
-
Eric Firing
-
Eric Fode
-
Eric Moore +
-
Eric Price +
-
Fazlul Shahriar +
-
Félix Hartmann +
-
Fernando Perez
-
Frank B +
-
Frank Breitling +
-
Frederic
-
Gabriel
-
GaelVaroquaux
-
Guillaume Gay +
-
Han Genuit
-
HaroldMills +
-
hklemm +
-
jamestwebber +
-
Jason Madden +
-
Jay Bourque
-
jeromekelleher +
-
Jesús Gómez +
-
jmozmoz +
-
jnothman +
-
Johannes Schönberger +
-
John Benediktsson +
-
John Salvatier +
-
John Stechschulte +
-
Jonathan Waltman +
-
Joon Ro +
-
Jos de Kloe +
-
Joseph Martinot-Lagarde +
-
Josh Warner (Mac) +
-
Jostein Bø Fløystad +
-
Juan Luis Cano Rodríguez +
-
Julian Taylor +
-
Julien Phalip +
-
K.-Michael Aye +
-
Kumar Appaiah +
-
Lars Buitinck
-
Leon Weber +
-
Luis Pedro Coelho
-
Marcin Juszkiewicz
-
Mark Wiebe
-
Marten van Kerkwijk +
-
Martin Baeuml +
-
Martin Spacek
-
Martin Teichmann +
-
Matt Davis +
-
Matthew Brett
-
Maximilian Albert +
-
m-d-w +
-
Michael Droettboom
-
mwtoews +
-
Nathaniel J. Smith
-
Nicolas Scheffer +
-
Nils Werner +
-
ochoadavid +
-
Ondřej Čertík
-
ovillellas +
-
Paul Ivanov
-
Pauli Virtanen
-
peterjc
-
Ralf Gommers
-
Raul Cota +
-
Richard Hattersley +
-
Robert Costa +
-
Robert Kern
-
Rob Ruana +
-
Ronan Lamy
-
Sandro Tosi
-
Sascha Peilicke +
-
Sebastian Berg
-
Skipper Seabold
-
Stefan van der Walt
-
Steve +
-
Takafumi Arakaki +
-
Thomas Robitaille +
-
Tomas Tomecek +
-
Travis E. Oliphant
-
Valentin Haenel
-
Vladimir Rutsky +
-
Warren Weckesser
-
Yaroslav Halchenko
-
Yury V. Zaytsev +
总共有 119 人为此版本做出了贡献。名字后带有“+”符号的人第一次贡献了补丁。
亮点
-
新的,不再使用 2to3,Python 2 和 Python 3 由一个共同的代码库支持。
-
新的,用于线性代数的 gufuncs,可以对堆叠数组进行操作。
-
新的,用于 ufunc 的原位花式索引,使用
.at
方法。 -
新的
partition
函数,通过选择进行部分排序以获得快速中位数。 -
新的
nanmean
,nanvar
和nanstd
函数跳过 NaN 值。 -
新的
full
和full_like
函数用于创建值初始化的数组。 -
新的
PyUFunc_RegisterLoopForDescr
,为用户定义的数据类型提供更好的 ufunc 支持。 -
在许多领域进行了许多性能改进。
不再支持
不再支持 Python 2.4 和 2.5 版本,
不再支持 SCons。
未来的变化
Datetime64 类型在此版本中仍处于实验阶段。在 1.9 版本中可能会进行一些更改以使其更易于使用。
目前的对角方法会返回一个新数组并引发 FutureWarning。在 1.9 版本中,它将返回一个只读视图。
从结构化类型的数组中进行多字段选择目前会返回一个新数组并引发 FutureWarning。在 1.9 版本中,它将返回一个只读视图。
numpy/oldnumeric 和 numpy/numarray 兼容模块将在 1.9 版本中被移除。
兼容性说明
doc/sphinxext 内容已移至自己的 github 存储库,并作为 numpy 的子模块包含在其中。请参阅 doc/HOWTO_BUILD_DOCS.rst 中的说明以访问内容。
numpy.void 标量的哈希函数已更改。以前,数据指针被哈希为整数。现在,哈希函数使用元组哈希算法来组合标量元素的哈希函数,但仅当标量为只读时。
Numpy 已将其构建系统默认切换为使用“分开编译”。在先前的版本中,这是受支持的,但不是默认设置。这应该产生与旧系统相同的结果,但如果您尝试做一些复杂的事情,比如静态链接 numpy 或使用不寻常的编译器,那么您可能会遇到问题。如果是这样,请提交错误报告,并且作为临时解决方法,您可以通过导出 shell 变量 NPY_SEPARATE_COMPILATION=0 重新启用旧的构建系统。
对于 AdvancedNew 迭代器,oa_ndim
标志现在应为-1,表示不传递op_axes
和itershape
。现在,oa_ndim == 0
情况表示 0-D 迭代,op_axes
为 NULL,旧用法已被弃用。这不会影响NpyIter_New
或NpyIter_MultiNew
函数。
函数 nanargmin 和 nanargmax 现在对所有 NaN 切片的索引返回 np.iinfo[‘intp’].min。以前,这些函数对于数组返回会引发 ValueError,对于标量返回会返回 NaN。
NPY_RELAXED_STRIDES_CHECKING
有一个新的编译时环境变量NPY_RELAXED_STRIDES_CHECKING
。如果将此变量设置为 1,则 numpy 将考虑更多数组为 C-或 F-连续的情况 - 例如,现在可以同时拥有被视为 C-和 F-连续的列向量。新的定义更准确,允许编写更快速且减少不必要复制的代码,并简化了 numpy 内部的代码。但是,这也可能会破坏对 C-和 F-连续数组的步幅值做出过于强烈假设的第三方库。(目前已知这会破坏使用 memoryviews 的 Cython 代码,这将在 Cython 中修复。)这将在未来的发布中成为默认设置,请立即使用以下方式针对使用 NUMPY 构建的代码进行测试:
NPY_RELAXED_STRIDES_CHECKING=1 python setup.py install
您可以通过运行以下命令来检查 NPY_RELAXED_STRIDES_CHECKING 是否生效:
np.ones((10, 1), order="C").flags.f_contiguous
如果启用了宽松的步幅检查,则此值将为True
,否则为False
。到目前为止,我们所见过的典型问题是处理 C 连续数组的 C 代码,并假设可以通过查看PyArray_STRIDES(arr)
数组中的最后一个元素来访问 itemsize。当启用宽松步幅时,这不成立(实际上,在某些极端情况下从未成立)。相反,请使用PyArray_ITEMSIZE(arr)
。
有关更多信息,请查看文档中的“ndarray 的内部内存布局”部分。
二进制操作的第二个参数为非数组时
形式为<array-or-subclass> * <non-array-subclass>
的二进制操作,其中<non-array-subclass>
声明的__array_priority__
高于<array-or-subclass>
,现在将无条件返回NotImplemented,给<non-array-subclass>
处理操作的机会。以前,只有在<non-array-subclass>
实际实现了反向操作,并且尝试了<non-array-subclass>
的(可能昂贵的)数组转换后,才会返回NotImplemented。 (bug, pull request)
函数median只与overwrite_input一起使用时,数组只会被部分排序。
如果median与overwrite_input选项一起使用,则输入数组现在只会部分排序而不是完全排序。
修复了 financial.npv
函数的问题。
npv 函数存在一个错误。与文档所述相反,它从索引1
到M
而不是从0
到M - 1
求和。修复更改了返回值。mirr 函数调用了 npv 函数,但解决了问题,因此也进行了修复,并且 mirr 函数的返回值保持不变。
比较 NaN
数字时会出现运行时警告。
比较NaN
浮点数现在会引发invalid
运行时警告。如果预期有NaN
,则可以使用 np.errstate 忽略警告。例如:
with np.errstate(invalid='ignore'):
operation()
NPY_RELAXED_STRIDES_CHECKING
新的编译时环境变量NPY_RELAXED_STRIDES_CHECKING
。如果将此变量设置为 1,则 numpy 将考虑更多的数组为 C-或 F-contiguous - 例如,可能同时考虑为 C-和 F-contiguous 的列向量。新的定义更准确,允许更快速的代码,减少不必要的复制,并简化 numpy 内部的代码。但是,这也可能破坏对 C-和 F-contiguous 数组的步幅值做出过于强烈假设的第三方库。 (目前已知这会破坏使用 memoryviews 的 Cython 代码,这将在 Cython 中修复。)这将成为未来版本的默认设置,请立即使用已构建的 NUMPY 测试您的代码:
NPY_RELAXED_STRIDES_CHECKING=1 python setup.py install
您可以通过运行来检查 NPY_RELAXED_STRIDES_CHECKING 是否生效:
np.ones((10, 1), order="C").flags.f_contiguous
如果启用了放松步幅检查,则此值为True
,否则为False
。到目前为止,我们看到的典型问题是使用 C-contiguous 数组的 C 代码,并假设可以通过查看PyArray_STRIDES(arr)
数组中的最后一个元素来访问 itemsize。当放松步幅时,这不是真的(实际上,在某些边缘情况下从未是真的)。而是使用PyArray_ITEMSIZE(arr)
。
有关更多信息,请查看文档中的“ndarray 的内部内存布局”部分。
二进制操作的第二个参数不是数组时。
形式为<array-or-subclass> * <non-array-subclass>
的二进制操作,其中<non-array-subclass>
声明的__array_priority__
高于<array-or-subclass>
的操作现在将无条件返回NotImplemented,给予<non-array-subclass>
处理该操作的机会。以前,只有在<non-array-subclass>
实际实现了反向操作,并且尝试了<non-array-subclass>
的(可能昂贵的)数组转换后,才会返回NotImplemented。(bug, pull request)
使用overwrite_input选项的median函数仅部分排序数组
如果median与overwrite_input选项一起使用,则输入数组现在将仅部分排序,而不是完全排序。
修复了 financial.npv
npv 函数存在一个错误。与文档所述相反,它从索引1
到M
求和,而不是从0
到M - 1
。修复后更改了返回值。mirr 函数调用了 npv 函数,但解决了问题,因此也进行了修复,mirr 函数的返回值保持不变。
比较 NaN 数字时出现运行时警告
比较NaN
浮点数现在会引发invalid
运行时警告。如果预期会出现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.]]])
用于 ufunc 的原地花式索引
函数at
已添加到 ufunc 对象中,允许在使用花式索引时进行原地 ufunc 操作而无需缓冲。例如,以下操作将增加数组中的第一个和第二个项目,并将第三个项目增加两次:numpy.add.at(arr, [0, 1, 2, 2], 1)
这是许多人错误地认为arr[[0, 1, 2, 2]] += 1
会做的事情,但这并不起作用,因为arr[2]
的增量值只是简单地复制到arr
中的第三个槽位两次,而不是增加两次。
新函数partition和argpartition
新函数通过选择算法部分排序数组。
通过索引k
进行的partition
将k
个最小元素移动到数组的前面。k
之前的所有元素都小于或等于位置k
处的值,k
之后的所有元素都大于或等于位置k
处的值。这些边界内的值的排序是未定义的。可以提供一系列索引来一次性对它们进行排序,进行迭代分区。这可用于有效地获取样本的顺序统计量,如中位数或百分位数。partition
的时间复杂度为O(n)
,而完全排序的时间复杂度为O(n log(n))
。
新函数nanmean、nanvar和nanstd
添加了新的 nan 感知统计函数。在这些函数中,结果是如果从所有计算中省略 nan 值将获得的结果。
新函数full和full_like
创建填充特定值的数组的新便利函数;与现有的zeros和zeros_like函数相辅相成。
与大文件的 IO 兼容性
可以在 64 位系统上加载大于 2GB 的大 NPZ 文件。
针对 OpenBLAS 构建
现在可以通过编辑 site.cfg 构建 numpy 针对 OpenBLAS。
新常数
欧拉常数现在在 numpy 中作为 euler_gamma 暴露出来。
qr 的新模式
qr 分解添加了新的模式‘complete’、‘reduced’和‘raw’,旧的‘full’和‘economic’模式已被弃用。‘reduced’模式取代了旧的‘full’模式,并且是默认的,因此通过不指定模式可以保持向后兼容性。
‘complete’模式返回完整的维数分解,这对于获取范围空间的正交补基是有用的。‘raw’模式返回包含 Householder 反射器和缩放因子的数组,可以在将来应用 q 时使用,而无需转换为矩阵。‘economic’模式已经被弃用,没有太多用途,也不比‘raw’模式更有效。
in1d的新invert参数
函数in1d现在接受一个invert参数,当为True时,导致返回的数组被反转。
使用np.newaxis进行高级索引
现在可以在索引数组中使用np.newaxis/None,而不仅仅是在简单索引中。这意味着array[np.newaxis, [0, 1]]
现在可以按预期工作,并选择前两行,同时在数组前添加一个新轴。
C-API
现在可以使用内置输入类型和自定义输出类型注册新的 ufunc。在此更改之前,当从 Python 调用 ufunc 时,NumPy 无法找到正确的 ufunc 循环函数,因为 ufunc 循环签名匹配逻辑没有查看输出操作数类型。现在只要用户提供具有正确输出类型的输出参数,就可以找到正确的 ufunc 循环。
runtests.py
添加了一个简单的测试运行脚本runtests.py
。它还通过setup.py build
构建 Numpy,并可用于在开发过程中轻松运行测试。
对堆叠数组进行线性代数支持
现在 np.linalg 中使用 gufunc 机制,允许对堆叠数组和向量进行操作。例如:
>>> a
array([[[ 1., 1.],
[ 0., 1.]],
[[ 1., 1.],
[ 0., 1.]]])
>>> np.linalg.inv(a)
array([[[ 1., -1.],
[ 0., 1.]],
[[ 1., -1.],
[ 0., 1.]]])
对 ufunc 进行就地花式索引
函数at
已添加到 ufunc 对象中,允许在使用花式索引时进行无缓冲的就地 ufunc。例如,以下操作将增加数组中的第一个和第二个项目,并将第三个项目增加两次:numpy.add.at(arr, [0, 1, 2, 2], 1)
这就是许多人错误地认为arr[[0, 1, 2, 2]] += 1
会做的事情,但这并不起作用,因为arr[2]
的增量值只是简单地复制到arr
中的第三个槽位两次,而不是增加两次。
新函数partition和argpartition
通过选择算法部分排序数组的新函数。
通过索引k
的partition
将k
个最小元素移动到数组的前面。然后k
之前的所有元素都小于或等于位置k
处的值,而k
之后的所有元素都大于或等于位置k
处的值。这些边界内的值的排序是未定义的。可以提供一系列索引来一次性对它们进行排序,这可以用于有效地获取样本的中位数或百分位数等顺序统计量。partition
的时间复杂度为O(n)
,而完全排序的时间复杂度为O(n log(n))
。
新函数nanmean、nanvar和nanstd
添加了新的 nan 感知统计函数。在这些函数中,结果是如果 nan 值从所有计算中省略将获得的结果。
新函数full和full_like
新的便利函数用特定值填充数组;与现有的zeros和zeros_like函数相辅相成。
与大文件的 IO 兼容性
可以在 64 位系统上加载大于 2GB 的大 NPZ 文件。
针对 OpenBLAS 构建
现在可以通过编辑 site.cfg 来构建 numpy 针对 OpenBLAS。
新常数
欧拉常数现在在 numpy 中被暴露为 euler_gamma。
qr 的新模式
qr 分解添加了新模式‘complete’、‘reduced’和‘raw’,而旧的‘full’和‘economic’模式已被弃用。‘reduced’模式取代了旧的‘full’模式,并且是默认模式,因此可以通过不指定模式来保持向后兼容性。
‘complete’模式返回完整维数的分解,可用于获取正交补空间的基础。‘raw’模式返回包含 Householder 反射器和缩放因子的数组,可用于将来应用 q 而无需转换为矩阵。‘economic’模式只是被弃用,没有太多用处,也不比‘raw’模式更有效。
in1d的新invert参数
函数in1d现在接受一个invert参数,当为True时,导致返回的数组被反转。
使用np.newaxis进行高级索引
现在可以在索引数组中使用np.newaxis/None,而不仅仅是在简单索引中。这意味着array[np.newaxis, [0, 1]]
现在可以按预期工作,并选择前两行,同时在数组前面添加一个新轴。
C-API
现在可以使用内置输入类型和自定义输出类型注册新的 ufunc。在此更改之前,当从 Python 调用 ufunc 时,NumPy 无法找到正确的 ufunc 循环函数,因为 ufunc 循环签名匹配逻辑没有查看输出操作数类型。现在只要用户提供具有正确输出类型的输出参数,就可以找到正确的 ufunc 循环。
runtests.py
添加了一个简单的测试运行脚本runtests.py
。它还通过setup.py build
构建了 Numpy,并且可以在开发过程中轻松运行测试。
改进
IO 性能改进
通过分块改进了读取大文件的性能(另请参阅 IO 兼容性)。
pad的性能改进
pad函数有一个新的实现,大大提高了除*mode=*之外的所有输入的性能(保留以确保向后兼容性)。对于 rank >= 4,随着维度的增加,缩放得到了显着改善。
isnan、isinf、isfinite和byteswap的性能改进
isnan、isinf、isfinite和byteswap已经改进,以利用编译器内置函数,避免对 libc 的昂贵调用。这将在 gnu libc 系统上将这些操作的性能提高约两倍。
通过 SSE2 矢量化改进性能
优化了几个函数,以利用 SSE2 CPU SIMD 指令。
-
Float32 和 float64:
-
基本数学(加法、减法、除法、乘法)
-
平方根
-
最小值/最大值
-
绝对值
-
-
布尔:
-
逻辑或
-
逻辑与
-
逻辑非
-
这将这些操作的性能提高了 4 倍/2 倍,对于 float32/float64,对于 bool,根据数据在 CPU 缓存中的位置,性能提高了 10 倍。对于就地操作,性能增益最大。
为了使用改进的函数,必须在编译时启用 SSE2 指令集。在 x86_64 系统上默认启用。在具有能力的 CPU 的 x86_32 上,必须通过向 CFLAGS 构建变量传递适当的标志(使用 gcc 时为-msse2)来启用它。
中位数的性能改进
中位数现在是基于partition而不是sort实现的,这将其时间复杂度从 O(n log(n))降低到 O(n)。如果与overwrite_input选项一起使用,则数组现在只会部分排序而不是完全排序。
ufunc C-API 中可覆盖操作数标志
创建 ufunc 时,可以通过 ufunc 对象的新 op_flags 属性覆盖默认的 ufunc 操作数标志。���如,要设置第一个输入的操作数标志为读/写:
PyObject *ufunc = PyUFunc_FromFuncAndData(…); ufunc->op_flags[0] = NPY_ITER_READWRITE;
这允许 ufunc 就地执行操作。此外,全局 nditer 标志可以通过 ufunc 对象的新 iter_flags 属性覆盖。例如,要为 ufunc 设置 reduce 标志:
ufunc->iter_flags = NPY_ITER_REDUCE_OK;
IO 性能改进
通过分块改进了读取大文件的性能(另请参阅 IO 兼容性)。
对 pad 进行了性能改进
pad 函数有了新的实现,大大提高了除 mode= 外的所有输入的性能。对于秩 >= 4 的情况,随着维度的增加,性能显著提高。
对 isnan、isinf、isfinite 和 byteswap 进行了性能改进
isnan、isinf、isfinite 和 byteswap 已经改进,以利用编译器内置函数避免对 libc 的昂贵调用。这将在 gnu libc 系统上将这些操作的性能提高约两倍。
通过 SSE2 向量化实现性能改进
几个函数已经被优化以利用 SSE2 CPU SIMD 指令。
-
Float32 和 float64:
-
基本数学运算(加法、减法、除法、乘法)
-
平方根
-
最小值/最大值
-
绝对值
-
-
布尔值:
-
逻辑或
-
逻辑与
-
逻辑非
-
这些操作的性能提升最多可达到 float32/float64 的 4 倍/2 倍,对于 bool 类型最多可达到 10 倍,具体取决于数据在 CPU 缓存中的位置。对于原地操作,性能提升最大。
为了使用改进的函数,必须在编译时启用 SSE2 指令集。在 x86_64 系统上,默认启用。在具有能力的 CPU 的 x86_32 上,必须通过向 CFLAGS 构建变量传递适当的标志(使用 gcc 的 -msse2)来启用。
对 中位数 进行了性能改进
中位数 现在是基于 partition 而不是 sort 实现的,将其时间复杂度从 O(n log(n)) 降低到 O(n)。如果与 overwrite_input 选项一起使用,数组现在只会部分排序而不是完全排序。
ufunc C-API 中可覆盖的操作数标志
在创建 ufunc 时,可以通过 ufunc 对象的新 op_flags 属性覆盖默认的 ufunc 操作数标志。例如,要设置第一个输入的操作数标志为读/写:
PyObject *ufunc = PyUFunc_FromFuncAndData(…); ufunc->op_flags[0] = NPY_ITER_READWRITE;
这允许 ufunc 在原地执行操作。此外,全局 nditer 标志可以通过 ufunc 对象的新 iter_flags 属性覆盖。例如,要为 ufunc 设置减少标志:
ufunc->iter_flags = NPY_ITER_REDUCE_OK;
更改
一般
函数 np.take 现在允许将 0 维数组用作索引。
现在默认启用了分离编译模式。
对 np.insert 和 np.delete 进行了几处更改:
-
以前,负索引和指向数组末尾的索引会被简单地忽略。现在,这将引发一个未来或弃用警告。将来,它们将被视为正常索引对待 - 负索引将会循环,超出边界的索引将生成错误。
-
以前,布尔索引被视为整数(始终引用数组中的第 0 或第 1 项)。将来,它们将被视为掩码。在此版本中,它们引发一个未来警告,警告即将发生的变化。
-
在 Numpy 1.7 中,np.insert 已经允许使用 np.insert(arr, 3, [1,2,3]) 语法在单个位置插入多个项。在 Numpy 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
。
一般
函数 np.take 现在允许将 0-d 数组作为索引。
现在默认启用了分离编译模式。
对 np.insert 和 np.delete 进行了几处更改:
-
以前,负索引和指向数组末尾的索引会被简单地忽略。现在,这将引发一个 Future 或 Deprecation Warning。将来,它们将像正常索引一样对待 - 负索引将会循环,超出边界的索引将生成错误。
-
以前,布尔索引被视为整数(始终指向数组中的第 0 或第 1 项)。将来,它们将被视为掩码。在此版本中,它们会引发一个关于即将发生的更改的 FutureWarning 警告。
-
在 Numpy 1.7 中,np.insert 已经允许使用 np.insert(arr, 3, [1,2,3]) 语法在单个位置插入多个项。在 Numpy 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
。
弃用
‘full’ 和 ‘economic’ 模式的 qr 分解已被弃用。
一般
已弃用非整数用于索引和大多数整数参数的用法。以前,浮点索引和函数参数(如轴或形状)会被截断为整数而不发出警告。例如 arr.reshape(3., -1) 或 arr[0.] 将在 NumPy 1.8 中触发弃用警告,并且在将来的某个版本中它们将引发错误。
一般
对于索引和大多数整数参数的非整数使用已被弃用。以前,浮点索引和函数参数(如轴或形状)会被截断为整数而不发出警告。例如*arr.reshape(3., -1)或arr[0.]*将在 NumPy 1.8 中触发弃用警告,并且在未来的某个 NumPy 版本中它们将引发错误。
作者
本次发布包含以下至少贡献了一个补丁的人的工作。这些名字按照名字的字母顺序排列:
-
87
-
亚当·金斯伯格+
-
亚当·格里菲斯+
-
亚历山大·贝洛波尔斯基+
-
亚历克斯·巴斯+
-
亚历克斯·福特+
-
安德烈亚斯·希尔博尔+
-
安德烈亚斯·克勒克纳+
-
安德烈亚斯·施瓦布+
-
安德鲁·霍顿+
-
argriffing+
-
阿林克·维尔玛+
-
巴戈·阿米尔贝基安+
-
巴托什·泰伦丘克+
-
bebert218+
-
本杰明·鲁特+
-
比尔·斯波茨+
-
布拉德利·M·弗罗利
-
卡温·佩利+
-
查尔斯·哈里斯
-
克里斯
-
克里斯蒂安·布鲁费尔+
-
克里斯托夫·丹+
-
克里斯托夫·戈尔克
-
丹·希普斯曼+
-
丹尼尔+
-
丹·米勒+
-
daveydave400+
-
大卫·库尔纳波
-
大卫·沃德-法利
-
丹尼斯·拉克萨尔德
-
dmuellner+
-
爱德华·卡特默+
-
伊戈尔·辛迪+
-
endolith
-
埃里克·费林
-
埃里克·福德
-
埃里克·摩尔+
-
埃里克·普莱斯+
-
法兹卢尔·沙里亚尔+
-
费利克斯·哈特曼+
-
费尔南多·佩雷斯
-
弗兰克·B+
-
弗兰克·布雷特林+
-
弗雷德里克
-
加布里埃尔
-
盖尔·瓦罗克索
-
吉约姆·盖+
-
韩·格努伊特
-
哈罗德·米尔斯+
-
hklemm+
-
jamestwebber+
-
杰森·马登+
-
杰伊·布尔克
-
jeromekelleher+
-
耶稣·戈麦斯+
-
jmozmoz+
-
jnothman+
-
约翰内斯·舒恩贝格+
-
约翰·本尼迪克森+
-
约翰·萨尔瓦蒂尔+
-
约翰·斯特奇舒尔特+
-
乔纳森·沃尔特曼+
-
朱恩·罗+
-
乔斯·德·克洛伊+
-
约瑟夫·马丁诺-拉加德+
-
乔什·沃纳(Mac)+
-
约斯坦·布·弗洛伊斯塔德+
-
胡安·路易斯·卡诺·罗德里格斯+
-
朱利安·泰勒+
-
朱利安·法利普+
-
K.-迈克尔��艾+
-
库马尔·阿帕亚+
-
拉斯·布伊廷克
-
利昂·韦伯+
-
路易斯·佩德罗·科埃略
-
马尔钦·尤斯克维奇
-
马克·威比
-
马腾·范克尔维克+
-
马丁·包姆尔+
-
马丁·斯帕塞克
-
马丁·泰希曼+
-
马特·戴维斯+
-
马修·布雷特
-
马克西米利安·阿尔伯特+
-
m-d-w+
-
迈克尔·德罗特布姆
-
mwtoews+
-
纳撒尼尔·J·史密斯
-
尼古拉斯·谢弗+
-
尼尔斯·沃纳+
-
ochoadavid+
-
安德烈·切尔蒂克
-
ovillellas+
-
保罗·伊万诺夫
-
保利·维尔塔宁
-
peterjc
-
拉尔夫·戈默斯
-
劳尔·科塔+
-
理查德·哈特斯利+
-
罗伯特·科斯塔+
-
罗伯特·科恩
-
罗布·鲁安纳+
-
罗南·拉米
-
桑德罗·托西
-
萨沙·佩利克+
-
塞巴斯蒂安·贝格
-
斯基普·西博尔德
-
史蒂芬·范德瓦尔特
-
史蒂夫+
-
荒垣孝文+
-
托马斯·罗比泰尔+
-
托马斯·托梅切克+
-
特拉维斯·E·奥利芬特
-
瓦伦丁·哈内尔
-
弗拉基米尔·鲁茨基+
-
沃伦·韦克瑟
-
亚罗斯拉夫·哈尔琴科
-
尤里·V·扎伊采夫+
总共有 119 人为这个版本做出了贡献。名字后面带有“+”的人第一次贡献了一个补丁。