NumPy-1-26-中文文档-二十九-
NumPy 1.26 中文文档(二十九)
NumPy 1.10.4 发布说明
这个版本是一个由段错误回归驱动的 bug 修复源代码发布。对于这个版本,我们没有提供 Windows 二进制文件,因为我们用来生成这些文件的工具链中似乎存在 bug。希望这个问题会在下一个版本中得到解决。与此同时,我们建议使用 Windows 二进制文件的提供者之一。
兼容性说明
- trace 函数现在调用 ndarray 的子类的 trace 方法,除了 matrix,当前行为保持不变。这是为了帮助 AstroPy 的 units 包,并希望不会引起问题。
已解决的问题
-
gh-6922 BUG:在 Windows 上,numpy.recarray.sort 导致段错误。
-
gh-6937 BUG:busday_offset 在 modifiedpreceding roll 中做错了事情。
-
gh-6949 BUG:切片 recarray 的子类时会丢失类型。
已合并的 PR
以下 PR 已合并到 1.10.4。当 PR 是一个回溯时,列出了针对主分支的原始 PR 的 PR 编号。
-
gh-6840 TST:在 1.10.x 中更新 travis 测试脚本。
-
gh-6843 BUG:修复在 test_f2py 中仅在 Python 3 中使用 FileNotFoundError 的问题。
-
gh-6884 REL:更新 pavement.py 和 setup.py 以反映当前版本。
-
gh-6916 BUG:修复 test_f2py 以便在 runtests.py 中正确运行。
-
gh-6924 BUG:修复 segfault gh-6922。
-
gh-6942 修复 datetime roll='modifiedpreceding' 的 bug。
-
gh-6943 DOC,BUG:修复一些 latex 生成问题。
-
gh-6950 BUG:trace 不具备子类意识,np.trace(ma) != ma.trace()。
-
gh-6952 BUG:recarray 切片应该保留子类。
兼容性说明
- trace 函数现在调用 ndarray 的子类的 trace 方法,除了 matrix,当前行为保持不变。这是为了帮助 AstroPy 的 units 包,并希望不会引起问题。
已解决的���题
-
gh-6922 BUG:在 Windows 上,numpy.recarray.sort 导致段错误。
-
gh-6937 BUG:busday_offset 在 modifiedpreceding roll 中做错了事情。
-
gh-6949 BUG:切片 recarray 的子类时会丢失类型。
已合并的 PR
以下 PR 已合并到 1.10.4。当 PR 是一个回溯时,列出了针对主分支的原始 PR 的 PR 编号。
-
gh-6840 TST:在 1.10.x 中更新 travis 测试脚本。
-
gh-6843 BUG:修复在 test_f2py 中仅在 Python 3 中使用 FileNotFoundError 的问题。
-
gh-6884 REL:更新 pavement.py 和 setup.py 以反映当前版本。
-
gh-6916 BUG:修复 test_f2py 以便在 runtests.py 中正确运行。
-
gh-6924 BUG:修复 segfault gh-6922。
-
gh-6942 修复 datetime roll='modifiedpreceding' 的 bug。
-
gh-6943 DOC,BUG:修复一些 latex 生成问题。
-
gh-6950 BUG:trace 不具备子类意识,np.trace(ma) != ma.trace()。
-
gh-6952 BUG:recarray 切片应该保留子类。
NumPy 1.10.3 发布说明
本次发布未进行,因为涉及 PyPI 的各种问题。
NumPy 1.10.2 发行说明
该版本解决了 1.10.1 中出现的一些 bug,并添加了各种构建和发布改进。
Numpy 1.10.1 支持 Python 2.6 - 2.7 和 3.2 - 3.5。
兼容性说明
放宽的步幅检查不再是默认设置
存在与视图更改多维 Fortran 数组的 dtype 相关的向后兼容性问题,需要在较长时间内处理。
修复 numpy.i
中的 swig bug。
放宽的步幅检查揭示了 array_is_fortran(a)
中的一个 bug,该 bug 使用 PyArray_ISFORTRAN 而不是 PyArray_IS_F_CONTIGUOUS 来检查 Fortran 连续性。您可能希望使用更新后的 numpy.i 重新生成 swigged 文件。
弃用视图更改 Fortran 顺序中的维度
如果将新描述符分配给非 C 连续数组的 dtype 属性会导致形状发生变化,则此操作已被弃用。这实际上禁止使用改变第一个轴上元素大小的 dtype 查看多维 Fortran 数组。
弃用的原因是,当启用放宽步幅检查时,既是 C 连续又是 Fortran 连续的数组总是被视为 C 连续,这会破坏一些依赖两者在非标量数组的 ndim > 1 时互斥的代码。这种弃用为始终启用放宽步幅检查铺平了道路。
问题已解决
-
gh-6019 对于具有多维列的结构化数组,掩码数组 repr 失败。
-
gh-6462 空数组的中位数会产生 IndexError。
-
gh-6467 记录数组访问性能回归。
-
gh-6468 numpy.interp 在
x[0]==xp[0]
时仍然使用‘left’值。 -
gh-6475 当其参数之一是 memmap 时,np.allclose 返回一个 memmap。
-
gh-6491 广播 stride_tricks 数组中的错误。
-
gh-6495 在 gfortran 中无法识别命令行选项‘-ffpe-summary’。
-
gh-6497 对 recarrays 上的 reduce 操作失败。
-
gh-6498 在 1.10 发行说明中提到了默认转换规则的更改。
-
gh-6530 partition function 在空输入时出错。
-
gh-6532 numpy.inner 有时会返回错误的不准确值。
-
gh-6563 最近版本的 f2py 中 Intent(out) 失效。
-
gh-6569 无法在执行‘python setup.py build_ext -i’后运行测试。
-
gh-6572 广播 stride_tricks 数组组件中的错误。
-
gh-6575 BUG:Split 生成了维度错误的空数组
-
gh-6590 numpy 1.10 中的 Fortran 数组问题。
-
gh-6602 Random all 缺少 choice 和 dirichlet。
-
gh-6611 ma.dot 在 1.10 中不再总是返回掩码数组。
-
gh-6618
numpy.i
中的make_fortran()
中的 NPY_FORTRANORDER。 -
gh-6636 numpy.recarray 中嵌套 dtypes 中的内存泄漏。
-
gh-6641 按字段对 recarray 进行子集化会产生结构化数组。
-
gh-6667 ma.make_mask 错误处理 ma.nomask 输入。
-
gh-6675 优化的 blas 检测在 master 和 1.10 中出现问题。
-
gh-6678 从中获得意外错误:X.dtype = complex(或 Y = X.view(complex))
-
gh-6718 f2py 测试在虚拟环境中安装的 numpy-1.10.1 中失败。
-
gh-6719 编译 Cython 文件时出错:Pythonic division not allowed without gil。
-
gh-6771 Numpy.rec.fromarrays 在版本 1.9.2 和 1.10.1 之间丢失 dtype 元数据。
-
gh-6781 maintenance/1.10.x 中的 travis-ci 脚本需要修复。
-
gh-6807 Windows 测试错误 1.10.2。
合并的 PR
以下 PR 已合并到 1.10.2。当 PR 是回溯时,列出针对主分支的原始 PR 的 PR 编号。
-
gh-5773 维护:在 pytest 中使用测试助手时隐藏跟踪。
-
gh-6094 BUG:修复掩码结构化数组的字符串表示 bug。
-
gh-6208 维护:通过删除不必要的安全检查加快字段访问速度。
-
gh-6460 BUG:通过更少侵入性的过程替换 os.environ.clear。
-
gh-6470 BUG:修复 numpy distutils 中的 AttributeError。
-
gh-6472 维护:在 travis 3.5 测试中使用 Python 3.5 而不是 3.5-dev。
-
gh-6474 REL:更新 Paver 脚本以进行 sdist 和自动切换测试警告。
-
gh-6478 BUG:修复 OS X 构建的 Intel 编译器标志。
-
gh-6481 维护:现在支持带有空格的 LIBPATH Python 2.7+和 Win32。
-
gh-6487 BUG:允许在 f2py 中定义数组时嵌套使用参数。
-
gh-6488 BUG:在 f2py 中扩展公共块而不是覆盖。
-
gh-6499 文档:提到就地操作的默认转换已更改。
-
gh-6500 BUG:视为子数组的 Recarrays 不转换为 np.record 类型。
-
gh-6501 REL:为构建的文档添加“make upload”命令,更新“make dist”。
-
gh-6526 BUG:修复在-O 模式下 setup.py 中 doc 的使用。
-
gh-6527 BUG:���复对空数组取中位数时的 IndexError。
-
gh-6537 BUG:使带有标量参数的 ma.atleast_*返回数组。
-
gh-6538 BUG:修复 ma.masked_values 如果请求则不会缩小掩码。
-
gh-6546 BUG:修复非连续数组的内积回归问题。
-
gh-6553 BUG:修复空输入的 partition 和 argpartition 错误。
-
gh-6556 BUG:broadcast_arrays 与 as_strided 数组中的错误。
-
gh-6558 维护:对“make upload”文档构建命令进行轻微更新。
-
gh-6562 BUG:在 recarray 中禁用视图安全检查。
-
gh-6567 BUG:在 f2py 中恢复一些 import *修复。
-
gh-6574 文档:Numpy 1.10.2 的发布说明。
-
gh-6577 BUG:修复#6569,允许 build_ext –inplace。
-
gh-6579 维护:修复文档上传规则中的错误。
-
gh-6596 BUG:修复放松步幅检查的 swig。
-
gh-6606 文档:更新 1.10.2 发布说明。
-
gh-6614 BUG:将 choice 和 dirichlet 添加到 numpy.random.all。
-
gh-6621 BUG:修复 swig make_fortran 函数。
-
gh-6628 BUG:使 allclose 返回 python bool。
-
gh-6642 BUG:修复 _convert_from_dict 中的内存泄漏。
-
gh-6643 ENH:使 recarray.getitem 返回 recarray。
-
gh-6653 BUG:修复 ma 点始终返回掩码数组。
-
gh-6668 BUG:ma.make_mask 应始终为 nomask 返回 nomask 参数。
-
gh-6686 BUG:修复 assert_string_equal 中的一个 bug。
-
gh-6695 BUG:修复构建过程中创建的临时目录删除问题。
-
gh-6697 维护:修复宏定义中 PyArray_FROM_OT 的多余分号。
-
gh-6698 TST:测试 np.rint 对大整数的错误。
-
gh-6717 BUG:在 linux 上重新添加回退 CBLAS 检测。
-
gh-6721 BUG:修复#6719。
-
gh-6726 BUG:修复放宽步幅回滚暴露的 bug。
-
gh-6757 BUG:如果检测到 cblas,则链接 cblas 库。
-
gh-6756 测试:只测试 f2py,而不是 f2py2.7 等,修复#6718。
-
gh-6747 DEP:弃用通过 descr 更改非 C 连续数组形状的方式。
-
gh-6775 维护:在一些文件中包含缺失的 future 样板。
-
gh-6780 BUG:元数据未复制到 base_dtype。
-
gh-6783 BUG:为新的 google 基础设施修复 travis ci 测试。
-
gh-6785 BUG:对 interp 进行快速而肮脏的修复。
-
gh-6813 测试,BUG:使 32 位系统上的 test_mvoid_multidim_print 正常工作。
-
gh-6817 BUG:为 npy_rint 禁用 32 位 msvc9 编译器优化。
-
gh-6819 测试:修复 Python 2.x 在 Windows 上的 test_mvoid_multidim_print 失败。
对 mingwpy 的初始支持被撤销,因为它对非 Windows 构建造成了问题。
- gh-6536 BUG:撤销 gh-5614 以修复非 Windows 构建问题
由于结果将在 Numpy 1.11 中存在并且已经存在于 Numpy 1.9 中,因此对 np.lib.split 的修复被撤销。有关该问题的讨论,请参见 gh-6575 以获取澄清。
- gh-6576 BUG:撤销 gh-6376 以修复空数组的分割行为。
放宽步幅检查已被撤销。涉及视图改变多维 Fortran 数组的 dtype 的向后兼容性问题需要在较长时间内处理。
- gh-6735 维护:使 1.10 中没有放宽步幅检查成为默认设置。
注意事项
Numpy 1.10.1 版本中的一个 bug 导致依赖 Numpy 的项目中引发RuntimeWarning
和DeprecationWarning
异常。已经修复。
兼容性注意事项
放宽步幅检查不再是默认设置
涉及视图改变多维 Fortran 数组的 dtype 的向后兼容性问题需要在较长时间内处理。
修复numpy.i
中的 swig bug。
放宽步幅检查揭示了array_is_fortran(a)
中的 bug,该 bug 使用 PyArray_ISFORTRAN 而不是 PyArray_IS_F_CONTIGUOUS 来检查 Fortran 连续性。您可能需要使用更新后的 numpy.i 重新生成 swigged 文件。
弃用视图更改 Fortran 顺序中的维度
这将弃用将新描述符分配给非 C 连续数组的 dtype 属性,如果结果导致形状发生变化。这实际上禁止使用改变第一个轴上元素大小的 dtype 查看多维 Fortran 数组。
弃用的原因是,启用放宽步幅检查时,既是 C 连续又是 Fortran 连续的数组总是被视为 C 连续,这破坏了一些依赖两者在非标量数组的 ndim > 1 情况下互斥的代码。这种弃用为始终启用放宽步幅检查铺平了道路。
放宽步幅检查不再是默认设置
存在涉及视图更改多维 Fortran 数组 dtype 的向后兼容性问题,需要在较长时间内处理。
修复numpy.i
中的 swig bug。
放松的步幅检查揭示了array_is_fortran(a)
中的一个错误,该错误使用 PyArray_ISFORTRAN 而不是 PyArray_IS_F_CONTIGUOUS 来检查 Fortran 连续性。您可能需要使用更新后的 numpy.i 重新生成 swigged 文件。
弃用更改 Fortran 顺序中维度的视图
如果将新描述符分配给非 C 连续数组的 dtype 属性导致形状发生变化,则此操作已被弃用。这实际上禁止使用在第一个轴上改变元素大小的 dtype 查看多维 Fortran 数组。
弃用的原因是,当启用放松步幅检查时,既是 C 连续又是 Fortran 连续的数组始终被视为 C 连续,这会破坏一些依赖两者在 ndim > 1 的非标���数组中互斥的代码。这种弃用为始终启用放松步幅检查铺平了道路。
问题已解决
-
gh-6019 对于具有多维列的结构化数组,掩码数组 repr 失败。
-
gh-6462 空数组的中位数产生 IndexError。
-
gh-6467 记录数组访问性能回归。
-
gh-6468 numpy.interp 即使 x[0]==xp[0]也使用‘left’值。
-
gh-6475 当其参数之一是 memmap 时,np.allclose 返回一个 memmap。
-
gh-6491 广播 stride_tricks 数组中的错误。
-
gh-6495 gfortran 中无法识别命令行选项‘-ffpe-summary’。
-
gh-6497 对 recarrays 的 reduce 操作失败。
-
gh-6498 在 1.10 版本发布说明中提到默认转换规则的更改。
-
gh-6530 分区函数在空输入时出错。
-
gh-6532 numpy.inner 有时返回错误的不准确值。
-
gh-6563 Intent(out)在最近版本的 f2py 中失效。
-
gh-6569 ‘python setup.py build_ext -i’后无法运行测试。
-
gh-6572 广播 stride_tricks 数组组件中的错误。
-
gh-6575 BUG:Split 生成带有错误维数的空数组
-
gh-6590 numpy 1.10 中的 Fortran 数组问题。
-
gh-6602 Random all 缺少 choice 和 dirichlet。
-
gh-6611 ma.dot 在 1.10 中不再总是返回一个掩码数组。
-
gh-6618 numpy.i 中 make_fortran()中的 NPY_FORTRANORDER
-
gh-6636 numpy.recarray 中嵌套 dtype 中的内存泄漏
-
gh-6641 按字段对 recarray 进行子集化会产生结构化数组。
-
gh-6667 ma.make_mask 错误处理 ma.nomask 输入。
-
gh-6675 优化的 blas 检测在主版本和 1.10 中出现问题。
-
gh-6678 从中获得意外错误:X.dtype = complex(或 Y = X.view(complex))
-
gh-6718 在虚拟环境中安装的 pip numpy-1.10.1 中 f2py 测试失败。
-
gh-6719 编译 Cython 文件时出错:不允许没有 gil 的 Pythonic division。
-
gh-6771 Numpy.rec.fromarrays 在 1.9.2 和 1.10.1 版本之间丢失 dtype 元数据
-
gh-6781 maintenance/1.10.x 中的 travis-ci 脚本需要修复。
-
gh-6807 1.10.2 的 Windows 测试错误
合并的 PR
以下 PR 已合并到 1.10.2。如果 PR 是回溯的,原始 PR 对主分支的 PR 编号将列出。
-
gh-5773 MAINT: 使用 pytest 时隐藏测试辅助 traceback。
-
gh-6094 BUG: 修复掩码结构化数组的字符串表示问题。
-
gh-6208 MAINT: 通过删除不必要的安全检查加快字段访问速度。
-
gh-6460 BUG: 用更少侵入性的方法替换 os.environ.clear。
-
gh-6470 BUG: 修复 numpy distutils 中的 AttributeError。
-
gh-6472 MAINT: 用 Python 3.5 替代 3.5-dev 进行 travis 3.5 测试。
-
gh-6474 REL: 为 sdist 和自动切换测试警告更新 Paver 脚本。
-
gh-6478 BUG: 修复 OS X 构建的 Intel 编译器标志。
-
gh-6481 MAINT: 支持带空格的 LIBPATH 现在支持 Python 2.7+ 和 Win32。
-
gh-6487 BUG: 允许在 f2py 中定义数组时嵌套使用参数。
-
gh-6488 BUG: 在 f2py 中扩展公共块而不是覆盖。
-
gh-6499 DOC: 提及就地操作的默认转换方式已更改。
-
gh-6500 BUG: 作为子数组查看的 recarrays 不会转换为 np.record 类型。
-
gh-6501 REL: 为构建文档添加“make upload”命令,更新“make dist”。
-
gh-6526 BUG: 修复在 -OO 模式下在 setup.py 中使用 doc 的问题。
-
gh-6527 BUG: 修复对空数组取中位数时的 IndexError。
-
gh-6537 BUG: 使带有标量参数的 ma.atleast_* 返回数组。
-
gh-6538 BUG: 修复 ma.masked_values 如果请求不会缩小掩码的问题。
-
gh-6546 BUG: 修复非连续数组的内积回归问题。
-
gh-6553 BUG: 修复空输入时 partition 和 argpartition 的错误。
-
gh-6556 BUG: 在 as_strided 数组中的 broadcast_arrays 中出现错误。
-
gh-6558 MAINT: 对“make upload”文档构建命令进行轻微更新。
-
gh-6562 BUG: 在 recarray 中禁用视图安全检查。
-
gh-6567 BUG: 在 f2py 中恢复一些 import * 修复。
-
gh-6574 DOC: Numpy 1.10.2 的发布说明。
-
gh-6577 BUG: 修复 #6569,允许 build_ext –inplace。
-
gh-6579 MAINT: 修复文档上传规则中的错误。
-
gh-6596 BUG: 修复对宽松步幅检查的 swig。
-
gh-6606 DOC: 更新 1.10.2 发布说明。
-
gh-6614 BUG: 将 choice 和 dirichlet 添加到 numpy.random.all。
-
gh-6621 BUG: 修复 swig make_fortran 函数。
-
gh-6628 BUG: 使 allclose 返回 python 布尔值。
-
gh-6642 BUG: 修复 _convert_from_dict 中的内存泄漏。
-
gh-6643 ENH: 使 recarray.getitem 返回一个 recarray。
-
gh-6653 BUG: 修复 ma dot 总是返回掩码数组的问题。
-
gh-6668 BUG: ma.make_mask 应始终对 nomask 参数返回 nomask。
-
gh-6686 BUG: 修复 assert_string_equal 中的一个 bug。
-
gh-6695 BUG: 修复构建过程中创建的临时目录删除问题。
-
gh-6697 MAINT: 修复 PyArray_FROM_OT 宏定义中的多余分号。
-
gh-6698 TST: 为大整数测试 np.rint bug。
-
gh-6717 BUG: 在 Linux 上重新添加 CBLAS 检测的回退。
-
gh-6721 BUG: 修复 #6719。
-
gh-6726 BUG: 修复宽松步幅回滚暴露的 bug。
-
gh-6757 BUG: 如果检测到 cblas,则链�� cblas 库。
-
gh-6756 TST: 只测试 f2py,而不是 f2py2.7 等,修复 #6718。
-
gh-6747 DEP: 弃用通过 descr 改变非 C 连续数组形状的操作。
-
gh-6775 MAINT: 在一些缺少的文件中包含来自 future 的样板。
-
gh-6780 BUG: 元数据未复制到 base_dtype。
-
gh-6783 BUG: 修复新的谷歌基础设施的 travis ci 测试。
-
gh-6785 BUG: 对 interp 进行快速而肮脏的修复。
-
gh-6813 TST,BUG: 使 test_mvoid_multidim_print 在 32 位系统上工作。
-
gh-6817 BUG: 禁用 32 位 msvc9 编译器对 npy_rint 的优化。
-
gh-6819 TST: 修复 Python 2.x 下 Windows 上的 test_mvoid_multidim_print 失败。
对 mingwpy 的初始支持被撤销,因为它给非 Windows 构建带来了问题。
- gh-6536 BUG: 撤销 gh-5614 以解决非 Windows 构建问题。
由于修复了 np.lib.split,因此被撤销,因为这导致了在 Numpy 1.11 中将出现的“修复”行为,而在 Numpy 1.9 中已经存在。请参考 gh-6575 上的问题讨论以澄清。
- gh-6576 BUG: 撤销 gh-6376 以修复空数组的分割行为。
放宽的步幅检查被撤销。涉及到视图改变多维 Fortran 数组的 dtype 的向后兼容性问题需要在较长时间内处理。
- gh-6735 MAINT: 使没有放宽的步幅检查成为 1.10 的默认设置。
注意
Numpy 1.10.1 版本中的一个错误导致依赖于 Numpy 的项目中引发了 RuntimeWarning
和 DeprecationWarning
的异常。已经修复。
NumPy 1.10.1 发布说明
此版本解决了 1.10.0 中出现的一些构建问题。大多数用户可能没有遇到这些问题。区别在于:
-
使用 msvc9 或 msvc10 编译 32 位 Windows 现在需要 SSE2。当不使用 SSE2 时,这是一种看起来有些编译错误的最简单修复方法。如果需要为不支持 SSE2 的 32 位 Windows 系统进行编译,mingw32 仍然可以工作。
-
使使用 VS2008 python2.7 SDK 更容易编译
-
更改英特尔编译器选项,以便生成支持没有 SSE4.2 的系统的代码。
-
一些 _config 测试函数需要显式整数返回,以避免 openSUSE rpmlinter 出错。
-
我们遇到了一个问题,pipy 不允许重复使用文件名,导致..*.postN 版本不断增加。不仅名称变得混乱,有些软件包也无法处理 postN 后缀。
Numpy 1.10.1 支持 Python 2.6 - 2.7 和 3.2 - 3.5。
提交记录:
45a3d84 DEP: 移除当设置 dtype 时对full的警告。0c1a5df BLD: 导入 setuptools 以允许使用 VS2008 python2.7 sdk 进行编译。04211c6 BUG: 在有序比较中将 nan 掩码为 1。826716f DOC: 记录 msvc 在 32 位平台上需要 SSE2 的原因。49fa187 BLD: 为 32 位 msvc 9 和 10 编译器启用 SSE2。dcbc4cc MAINT: 从配置检查中移除 Wreturn-type 警告。d6564cb BLD: 不要仅为 SSE4.2 处理器构建。15cb66f BLD: 不要仅为 SSE4.2 处理器构建。c38bc08 DOC: 修复百分位数文档字符串中的变量引用。78497f4 DOC: 将 1.10.0-notes.rst 在 1.10.x 分支中与主分支同步。
NumPy 1.10.0 发布说明
该版本支持 Python 2.6 - 2.7 和 3.2 - 3.5。
亮点
-
numpy.distutils 现在支持通过传递给 setup.py build 的 –parallel/-j 参数进行并行编译
-
numpy.distutils 现在通过 site.cfg 支持额外的定制,以控制编译参数,即运行时库、额外的链接/编译标志。
-
添加np.linalg.multi_dot:在单个函数调用中计算两个或多个数组的点积,同时自动选择最快的评估顺序。
-
新函数np.stack提供了一个通用接口,用于沿着新轴连接一系列数组,为沿着现有轴连接提供了np.concatenate的补充。
-
将nanprod添加到 nanfunctions 集合中。
-
在 Python 3.5 中支持‘@’运算符。
不再支持
-
_dotblas 模块已被移除。CBLAS 支持现在在 Multiarray 中。
-
testcalcs.py 文件已被移除。
-
polytemplate.py 文件已被移除。
-
npy_3kcompat.h 中的 npy_PyFile_Dup 和 npy_PyFile_DupClose 已被移除。
-
从 numpy/distutils/exec_command.py 中移除了 splitcmdline。
-
从 numpy/distutils/command/config.py 中移除了 try_run 和 get_output。
-
不再支持 a._format 属性用于数组打印。
-
从 np.genfromtxt 中移除了关键字
skiprows
和missing
。 -
从 np.correlate 中移除了关键字
old_behavior
。
未来变更
-
在类似
arr1 == arr2
的数组比较中,许多涉及字符串或结构化数据类型的边界情况,以前返回标量,现在会发出FutureWarning
或DeprecationWarning
,并且将来会更改为执行逐元素比较或引发错误。 -
在
np.lib.split
中,结果中的空数组始终具有维度(0,)
,无论被拆分的数组的维度如何。在 Numpy 1.11 中,这种行为将被更改,以便保留维度。自 Numpy 1.9 起已经存在对此更改的FutureWarning
,但由于 bug 的存在,有时不会发出警告,并且维度已经被保留。 -
SafeEval 类将在 Numpy 1.11 中被移除。
-
alterdot 和 restoredot 函数将在 Numpy 1.11 中被移除。
有关这些更改的更多详细信息,请参见下文。
兼容性说明
默认转换规则更改
就地操作的默认转换方式已更改为'same_kind'
。例如,如果 n 是一个整数数组,f 是一个浮点数数组,那么n += f
将导致TypeError
,而在以前的 Numpy 版本中,浮点数会被悄悄地转换为整数。在例子代码不是实际 bug 的情况下,可以通过将其重写为np.add(n, f, out=n, casting='unsafe')
以向后兼容的方式进行更新。自 Numpy 1.7 起,旧的'unsafe'
默认已被弃用。
numpy 版本字符串
开发版本的 numpy 版本字符串已从 x.y.z.dev-githash
更改为 x.y.z.dev0+githash
(注意 +),以符合 PEP 440。
放松的步幅检查
NPY_RELAXED_STRIDE_CHECKING 现在默认为 true。
更新:在 1.10.2 中,NPY_RELAXED_STRIDE_CHECKING 的默认值已更改为 false,以保持向后兼容性。在可以将其设置为默认值之前需要更多时间。作为路线图的一部分,还添加了对 f_contiguous 而不是 c_contiguous 数组的维度更改视图的弃用。
沿任何轴除了 axis=0
外的 1d 数组的连接引发 IndexError
自 NumPy 1.7 起,使用 axis != 0 已引发 DeprecationWarning,现在引发错误。
np.ravel、np.diagonal 和 np.diag 现在保留子类型
x.ravel() 和 np.ravel(x) 之间存在不一致的行为,以及 x.diagonal() 和 np.diagonal(x) 之间也是如此,方法保留子类型,而函数不保留。这已经修复,函数现在的行为类似于方法,保留子类型,除了矩阵的情况。矩阵是为了向后兼容而特殊处理的,仍然像以前一样���回 1-D 数组。如果需要保留矩阵子类型,请使用方法而不是函数。
rollaxis 和 swapaxes 总是返回一个视图
以前,除非轴的顺序没有发生变化,否则返回一个视图,此时返回输入数组。现在在所有情况下都返回一个视图。
nonzero 现在返回基本的 ndarrays
以前,在 1-D 输入(返回一个基本的 ndarray)和更高维度的输入之间存在不一致性(保留子类)。行为已统一,现在返回将是一个基本的 ndarray。子类仍然可以通过提供自己的 nonzero 方法来覆盖此行为。
C API
对 swapaxes 的更改也适用于 PyArray_SwapAxes C 函数,现在在所有情况下都返回一个视图。
对 nonzero 的更改也适用于 PyArray_Nonzero C 函数,现在在所有情况下都返回一个基本的 ndarray。
dtype 结构(PyArray_Descr)在末尾有一个新成员来缓存其哈希值。这不应影响任何良好编写的应用程序。
对连接函数 DeprecationWarning 的更改也影响 PyArray_ConcatenateArrays,
recarray 字段返回类型
以前,通过属性和索引访问的 recarray 字段的返回类型不一致,并且字符串类型的字段被返回为 chararrays。现在,通过属性或索引访问的字段将为非结构化类型的字段返回一个 ndarray,并为结构化类型的字段返回一个 recarray。值得注意的是,这会影响包含带有空格的字符串的 recarrays,因为 chararrays 会删除尾随空格,而字符串类型的 ndarrays 会保留尾随空格。此外,嵌套结构字段的 dtype.type 现在是继承的。
recarray 视图
将 ndarray 视为 recarray 现在会自动将 dtype 转换为 np.record。请参阅新的记录数组文档。此外,查看具有非结构化 dtype 的 recarray 不再将结果的类型转换为 ndarray - 结果将保持为 recarray。
ufuncs 的‘out’关键字参数现在接受数组元组
在使用 ufunc 的‘out’关键字参数时,可以提供一个数组元组,每个 ufunc 输出一个数组。对于具有单个输出的 ufunc,单个数组也是有效的‘out’关键字参数。以前可以在‘out’关键字参数中提供单个数组,并且它将用作具有多个输出的 ufunc 的第一个输出,现在已被弃用,并且现在会导致DeprecationWarning,并且将来会导致错误。
使用字节数组索引现在会引发 IndexError
在 Python 3 中使用字节字符串对 ndarray 进行索引现在会引发 IndexError 而不是 ValueError。
包含具有数组的对象的掩码数组
对于这种(罕见的)掩码数组,获取单个掩码项不再返回损坏的掩码数组,而是完全掩码的项。
当遇到无效值时,中位数会发出警告并返回 nan
与 mean、median 和 percentile 类似,现在在存在NaN的切片中发出运行时警告并返回NaN。要计算中位数或百分位数而忽略无效值,请使用新的nanmedian或nanpercentile函数。
numpy.ma.testutils 中可用的函数已更改
所有来自 numpy.testing 的函数曾经都可以从 numpy.ma.testutils 中获得,但并非所有这些函数都重新定义为与掩码数组一起使用。现在已从 numpy.ma.testutils 中删除了大多数这些函数,仅保留了一小部分以保持向后兼容性。从长远来看,这应该有助于避免错误使用错误的函数,但这可能会导致某些导入问题。
新功能
从 site.cfg 读取额外的标志
以前,对依赖库和 numpy 本身的编译的自定义仅通过在 distutils 包中进行代码更改才能实现。现在,numpy.distutils 从每个site.cfg组中读取以下额外的标志:
-
runtime_library_dirs/rpath
,设置运行时库目录以覆盖LD_LIBRARY_PATH
-
extra_compile_args
,为源代码编译添加额外的标志 -
extra_link_args
,在链接库时添加额外的标志
这应该至少部分完成用户自定义。
np.cbrt用于计算实浮点数的立方根
np.cbrt包装了 C99 立方根函数cbrt。与np.power(x, 1./3.)相比,它对负实浮点数有明确定义,并且速度稍��。
numpy.distutils 现在允许并行编译
通过将–parallel=n或-j n传递给setup.py build,现在可以在n个并行进程中执行扩展的编译。并行化仅限于一个扩展内的文件,因此使用 Cython 的项目不会受益,因为它从单个文件构建扩展。
genfromtxt具有新的max_rows
参数
genfromtxt添加了max_rows
参数,以限制单次调用中读取的行数。使用此功能,可以通过多次调用该函数来读取存储在单个文件中的多个数组。
用于调用数组广播的新函数np.broadcast_to
np.broadcast_to手动将数组广播到给定形状,符合 numpy 的广播规则。该功能类似于 broadcast_arrays,实际上已经重写为在内部使用 broadcast_to,但只需要一个数组。
用于测试警告的新上下文管理器clear_and_catch_warnings
当 Python 发出警告时,它会记录该警告已在引发警告的模块中发出,记录在模块属性__warningregistry__
中。一旦发生这种情况,除非清除__warningregistry__
中的相关条目,否则不可能再次发出警告。这使得测试警告变得困难且脆弱,因为如果您的测试在已经引发警告的另一个测试之后进行,您将无法发出警告或测试它。上下文管理器clear_and_catch_warnings
在进入时清除模块注册表中的警告,并在退出时重置它们,这意味着警告可以被重新引发。
cov具有新的fweights
和aweights
参数
fweights
和aweights
参数通过对观测向量应用两种类型的加权来为协方差计算添加新功能。fweights
数组指示每个观测向量的重复次数,而aweights
数组提供它们的相对重要性或概率。
Python 3.5+中对‘@’运算符的支持
Python 3.5 添加了对在 PEP465 中提出的矩阵乘法运算符‘@’的支持。已经实现了初步支持,并且还添加了一个等效函数matmul
用于测试目的和在较早的 Python 版本中使用。该函数是初步的,其可选参数的顺序和数量可能会发生变化。
fft 函数的新参数norm
默认归一化使直接变换不缩放,而逆变换按(1/n)缩放。通过将关键字参数norm
设置为"ortho"
(默认为None),可以获得单位变换,这样直接和逆变换都将按(1/\sqrt{n})缩放。
改进
np.digitize使用二分查找
np.digitize现在是基于np.searchsorted实现的。这意味着使用二分搜索对值进行分箱,对于较大数量的箱,比以前的线性搜索更好。它还消除了输入数组必须是 1 维的要求。
np.poly现在将整数输入转换为浮点数
np.poly 现在会将整数类型的一维输入数组转换为双精度浮点数,以防止计算单项式时整数溢出。通过传入一个填充了 Python 整数的对象类型数组,仍然可以获得更高精度的结果。
np.interp 现在可以与周期函数一起使用
np.interp 现在有一个新参数 period,用于提供输入数据 xp 的周期。在这种情况下,输入数据将被正确归一化到给定的周期,并且在 xp 的每个极端处添加一个端点,以关闭前一个和下一个周期循环,从而实现正确的插值行为。
np.pad 支持更多输入类型的 pad_width
和 constant_values
。
constant_values
参数现在接受 NumPy 数组和浮点值。NumPy 数组被支持作为 pad_width
的输入,并且如果其值不是整数类型,则会引发异常。
np.argmax 和 np.argmin 现在支持 out
参数。
为了与 ndarray.argmax 和 ndarray.argmin 保持一致,np.argmax 和 np.argmin 添加了 out
参数。新参数的行为与这些方法中的行为完全相同。
检测并使用更多系统 C99 复数函数
所有 in complex.h
中的函数现在都被检测到。以下函数有新的回退实现。
-
npy_ctan,
-
npy_cacos、npy_casin、npy_catan
-
npy_ccosh、npy_csinh、npy_ctanh,
-
npy_cacosh、npy_casinh、npy_catanh
由于这些改进,返回值将会有一些小的变化,特别是对于边界情况。
np.loadtxt 支持由 float.hex
方法生成的字符串
由 float.hex
生成的字符串看起来��� 0x1.921fb54442d18p+1
,因此这不是用于表示无符号整数类型的十六进制。
np.isclose 现在正确处理整数 dtypes 的最小值。
为了正确处理整数类型的最小值,np.isclose 现在在比较时会转换为浮点数 dtype。这使其行为与 np.allclose 提供的行为一致。
np.allclose 在内部使用 np.isclose。
np.allclose 现在在内部使用 np.isclose,并通过设置 equal_nan=True
继承了比较 NaNs 相等的能力。子类,如 np.ma.MaskedArray,现在也被保留。
np.genfromtxt 现在可以正确处理大整数。
np.genfromtxt 现在可以在 32 位系统上正确处理大于 2**31-1
的整数,在 64 位系统上可以处理大于 2**63-1
的整数(在这些情况下,它以前会崩溃并显示 OverflowError
)。大于 2**63-1
的整数将被转换为浮点值。
np.load、np.save 现在具有 pickle 向后兼容标志。
函数 np.load 和 np.save 现在具有用于控制 pickled Python 对象向后兼容性的额外关键字参数。这使得 Python 3 上的 Numpy 能够加载包含在 Python 2 上生成的对象数组的 npy 文件。
MaskedArray 支持更复杂的基类
内置假设基类的行为类似于普通数组正在被移除。特别是,设置和获取元素和范围将尊重__setitem__
和__getitem__
的基类覆盖,算术将尊重__add__
,__sub__
等的覆盖。
变更
dotblas 功能移至 multiarray
dot、inner 和 vdot 的 cblas 版本已集成到 multiarray 模块中。特别是,vdot 现在是一个 multiarray 函数,以前不是。
更严格检查 gufunc 签名的一致性
广义通用函数的输入现在更严格地根据函数的签名进行检查:所有核心维度现在必须存在于输入数组中;具有相同标签的核心维度必须具有完全相同的大小;并且输出核心维度必须被指定,可以通过相同标签的输入核心维度或通过传入的输出数组来指定。
np.einsum返回的视图是可写的
np.einsum返回的视图现在只要输入数组可写,就是可写的。
np.argmin跳过 NaT 值
np.argmin现在跳过 datetime64 和 timedelta64 数组中的 NaT 值,使其与np.min,np.argmax和np.max一致。
弃用
涉及字符串或结构化 dtype 的数组比较
通常,数组上的比较操作执行逐元素比较并返回布尔数组。但在一些边缘情况下,特别是涉及字符串或结构化 dtype 时,NumPy 历史上返回标量而不是数组。例如:
### Current behaviour
np.arange(2) == "foo"
# -> False
np.arange(2) < "foo"
# -> True on Python 2, error on Python 3
np.ones(2, dtype="i4,i4") == np.ones(2, dtype="i4,i4,i4")
# -> False
在 1.9 版本开始的工作继续进行,在 1.10 版本中,这些比较现在将引发FutureWarning
或DeprecationWarning
,并且将来它们将被修改以更一致地与其他比较操作行为,例如:
### Future behaviour
np.arange(2) == "foo"
# -> array([False, False])
np.arange(2) < "foo"
# -> error, strings and numbers are not orderable
np.ones(2, dtype="i4,i4") == np.ones(2, dtype="i4,i4,i4")
# -> [False, False]
SafeEval
numpy/lib/utils.py 中的 SafeEval 类已被弃用,并将在下一个版本中删除。
alterdot,restoredot
alterdot
和restoredot
函数不再起作用,并已被弃用。
pkgload,PackageLoader
这些加载包的方式现在已被弃用。
bias
,ddof
参数对corrcoef
的影响
corrcoef
函数的bias
和ddof
参数的值在相关系数所暗示的除法中被取消,因此对返回值没有影响。
我们现在不再支持corrcoef
函数和掩码数组版本ma.corrcoef
中的这些参数。
因为我们正在弃用ma.corrcoef
中的bias
参数,所以我们也弃用allow_masked
参数作为位置参数的使用,因为其位置将随着bias
的移除而改变。allow_masked
将在适当的时候成为仅限关键字参数。
dtype 字符串表示更改
从 1.6 版本开始,从字符串表示中创建 dtype 对象,例如'f4'
,如果大小与现有类型不对应,则会发出弃用警告,并默认创建与该类型的默认大小相对应的 dtype。从此版本开始,这将引发TypeError
。
唯一的例外是对象数据类型,其中'O4'
和'O8'
仍会发出弃用警告。这种平台相关的表示将在下一个版本中引发错误。
为了应对即将到来的变化,对象数据类型的字符串表示,即np.dtype(object).str
,不再包括项目大小,即将返回'|O'
而不是以前的'|O4'
或'|O8'
。
亮点
-
numpy.distutils 现在支持通过传递给 setup.py build 的--parallel/-j 参数进行并行编译。
-
numpy.distutils 现在通过 site.cfg 支持额外的定制,以控制编译参数,即运行时库,额外的链接/编译标志。
-
添加np.linalg.multi_dot:在单个函数调用中计算两个或多个数组的点积,同时自动选择最快的计算顺序。
-
新函数np.stack提供了一个通用接口,用于沿着新轴连接一系列数组,为沿着现有轴连接的np.concatenate提供补充。
-
nanprod已添加到 nanfunctions 集合中。
-
不再支持 Python 3.5 中的‘@’运算符。
不再支持
-
_dotblas 模块已被移除。CBLAS 支持现在在 Multiarray 中。
-
testcalcs.py 文件已被移除。
-
polytemplate.py 文件已被移除。
-
npy_PyFile_Dup 和 npy_PyFile_DupClose 已从 npy_3kcompat.h 中移除。
-
从 numpy/distutils/exec_command.py 中移除了 splitcmdline。
-
numpy/distutils/command/config.py 中的 try_run 和 get_output 已被移除。
-
不再支持 a._format 属性用于数组打印。
-
从 np.genfromtxt 中移除了关键字
skiprows
和missing
。 -
从 np.correlate 中移除了关键字
old_behavior
。
未来的更改
-
在类似
arr1 == arr2
的数组比较中,许多涉及字符串或结构化数据类型的边缘情况,以前返回标量,现在会发出FutureWarning
或DeprecationWarning
,并且将来会更改为执行逐元素比较或引发错误。 -
在
np.lib.split
中,结果中的空数组始终具有维度(0,)
,无论被拆分的数组的维度如何。在 Numpy 1.11 中,此行为将更改为保留维度。自 Numpy 1.9 以来,已经对此更改进行了FutureWarning
,但由于错误,有时不会发出警告,并且维度已经被保留。 -
SafeEval 类将在 Numpy 1.11 中被移除。
-
alterdot 和 restoredot 函数将在 Numpy 1.11 中被移除。
有关这些更改的更多详细信息,请参见下文。
兼容性说明
默认转换规则更改
就地操作的默认转换已更改为 'same_kind'
。例如,如果 n 是整数数组,f 是浮点数数组,则 n += f
将导致 TypeError
,而在以前的 Numpy 版本中,浮点数会被悄悄地转换为整数。在不太可能的情况下,如果示例代码不是实际错误,则可以通过将其重写为 np.add(n, f, out=n, casting='unsafe')
以向后兼容的方式进行更新。自 Numpy 1.7 以来,旧的 'unsafe'
默认已被弃用。
numpy 版本字符串
为了符合 PEP 440,开发版本的 numpy 版本字符串已从 x.y.z.dev-githash
更改为 x.y.z.dev0+githash
(注意加号)。
放松的步幅检查
NPY_RELAXED_STRIDE_CHECKING 现在默认为 true。
更新:在 1.10.2 中,NPY_RELAXED_STRIDE_CHECKING 的默认值已更改为 false,出于向后兼容性的原因。在可以将其设置为默认值之前需要更多时间。作为路线图的一部分,还添加了对 f_contiguous 而不是 c_contiguous 数组的维度更改视图的弃用。
沿任何轴向连接 1d 数组,除了 axis=0
会引发 IndexError
自 NumPy 1.7 以来,使用 axis != 0 已引发 DeprecationWarning,现在引发错误。
np.ravel、np.diagonal 和 np.diag 现在保留子类型
x.ravel() 和 np.ravel(x) 之间以及 x.diagonal() 和 np.diagonal(x) 之间存在不一致的行为,方法保留子类型,而函数则不保留。这已经修复,函数现在的行为类似于方法,保留子类型,除了矩阵的情况。矩阵是为了向后兼容而特殊处理的,仍然像以前一样返回 1-D 数组。如果需要保留矩阵子类型,请使用方法而不是函数。
rollaxis 和 swapaxes 总是返回视图
以前,除非轴的顺序没有发生变化,否则返回视图,此时将返回输入数组。现在在所有情况下都返回视图。
nonzero 现在返回基本的 ndarrays
以前,在 1-D 输入(返回基本 ndarray)和更高维度输入之间存在不一致性(保留子类)。行为已统一,现在返回将是基本 ndarray。子类仍然可以通过提供自己的 nonzero 方法来覆盖此行为。
C API
对 swapaxes 的更改也适用于 PyArray_SwapAxes C 函数,现在在所有情况下返回视图。
对 nonzero 的更改也适用于 PyArray_Nonzero C 函数,现在在所有情况下返回基本 ndarray。
dtype 结构(PyArray_Descr)在末尾有一个新成员来缓存其哈希值。这不应影响任何良好编写的应用程序。
对于拼接函数的更改 DeprecationWarning 也影响了 PyArray_ConcatenateArrays,
recarray 字段返回类型
以前通过属性和索引访问的 recarray 字段的返回类型不一致,并且字符串类型的字段将作为 chararrays 返回。现在,通过属性或索引访问的字段将对非结构化类型的字段返回一个 ndarray,对结构化类型的字段返回一个 recarray。值得注意的是,这会影响包含带有空格的字符串的 recarrays,因为 chararrays 会去除尾随空格,而字符串类型的 ndarrays 会保留尾随空格。此外,嵌套结构字段的 dtype.type 现在会被继承。
recarray 视图
将 ndarray 视为 recarray 现在会自动将 dtype 转换为 np.record。请参阅新的记录数组文档。此外,查看具有非结构化 dtype 的 recarray 不再将结果类型转换为 ndarray - 结果将保持为 recarray。
ufuncs 的 ‘out’ 关键字参数现在接受数组的元组
在使用 ufunc 的 ‘out’ 关键字参数时,可以提供一个数组元组,每个 ufunc 输出一个数组。对于具有单个输出的 ufunc,单个数组也是有效的 ‘out’ 关键字参数。以前可以在 ‘out’ 关键字参数中提供单个数组,并且它将用作具有多个输出的 ufunc 的第一个输出,现已被弃用,并且现���会导致 DeprecationWarning 和将来的错误。
字节数组索引现在会引发 IndexError
在 Python 3 中使用字节字符串对 ndarray 进行索引现在会引发 IndexError 而不是 ValueError。
包含具有数组的对象的掩码数组
对于这种(罕见的)掩码数组,获取单个掩码项不再返回损坏的掩码数组,而是返回完全掩码的项。
当遇到无效值时,中位数会发出警告并返回 nan
类似于 mean、median 和 percentile,现在在包含 NaN 的切片中会发出运行时警告并返回 NaN。要计算中位数或百分位数而忽略无效值,请使用新的 nanmedian 或 nanpercentile 函数。
numpy.ma.testutils 中可用的函数已更改
所有来自 numpy.testing 的函数曾经都可以从 numpy.ma.testutils 中获得,但并非所有函数都重新定义为与掩码数组一起使用。现在,大多数这些函数已从 numpy.ma.testutils 中删除,仅保留了一小部分以保持向后兼容性。从长远来看,这应该有助于避免错误使用错误的函数,但可能会导致一些导入问题。
默认转换规则更改
就地操作的默认转换已更改为 'same_kind'
。例如,如果 n 是一个整数数组,f 是一个浮点数数组,则 n += f
将导致 TypeError
,而在以前的 Numpy 版本中,浮点数会被静默转换为整数。在极少情况下,如果示例代码不是实际错误,则可以通过将其重写为 np.add(n, f, out=n, casting='unsafe')
以向后兼容的方式进行更新。自 Numpy 1.7 以来,旧的 'unsafe'
默认已被弃用。
numpy 版本字符串
开发版本的 numpy 版本字符串已从 x.y.z.dev-githash
更改为 x.y.z.dev0+githash
(注意 +),以符合 PEP 440。
宽松的步幅检查
NPY_RELAXED_STRIDE_CHECKING 现在默认为 true。
更新:在 1.10.2 中,NPY_RELAXED_STRIDE_CHECKING 的默认值已更改为 false,出于向后兼容性的原因。在可以将其设为默认值之前需要更多时间。作为路线图的一部分,还添加了对 f_contiguous 而不是 c_contiguous 数组的维度更改视图的弃用。
沿任何轴除了 axis=0
外连接 1d 数组会引发 IndexError
使用 axis != 0 自 NumPy 1.7 起已引发 DeprecationWarning,现在会引发错误。
np.ravel、np.diagonal 和 np.diag 现在保留子类型
x.ravel() 和 np.ravel(x) 之间存在不一致的行为,以及 x.diagonal() 和 np.diagonal(x) 之间也是如此,方法保留子类型,而函数则不是。这已经修复,现在函数的行为与方法相同,保留子类型,除了矩阵的情况。矩阵是为了向后兼容而特殊处理的,仍然像以前一样返回 1-D 数组。如果需要保留矩阵子类型,请使用方法而不是函数。
rollaxis 和 swapaxes 总是返回一个视图
以前,除非轴的顺序没有发生变化,否则会返回一个视图,此时会返回输入数组。现在在所有情况下都返回一个视图。
非零 现在返回基本的 ndarrays
以前,1-D 输入(返回基本的 ndarray)和更高维度的输入(保留子类)之间存在不一致。行为已统一,现在返回将是基本的 ndarray。子类仍然可以通过提供自己的 nonzero 方法来覆盖此行为。
C API
对 swapaxes 的更改也适用于 PyArray_SwapAxes C 函数,现在在所有情况下都返回一个视图。
对 nonzero 的更改也适用于 PyArray_Nonzero C 函数,现在在所有情况下都返回一个基本的 ndarray。
dtype 结构(PyArray_Descr)在末尾有一个新成员来缓存其哈希值。这不应影响任何良好编写的应用程序。
对连接函数 DeprecationWarning 的更改也影响 PyArray_ConcatenateArrays,
recarray 字段返回类型
以前通过属性和索引访问的 recarray 字段的返回类型不一致,并且字符串类型的字段被返回为 chararrays。现在,通过属性或索引访问的字段将为非结构化类型返回一个 ndarray,对于结构化类型的字段将返回一个 recarray。值得注意的是,这会影响包含带有空格的字符串的 recarrays,因为 chararrays 会去除尾随空格,但字符串类型的 ndarrays 会保留。此外,嵌套结构字段的 dtype.type 现在是继承的。
recarray 视图
将 ndarray 视为 recarray 现在会自动将 dtype 转换为 np.record。请参阅新的记录数组文档。此外,查看具有非结构化 dtype 的 recarray 现在不再将结果类型转换为 ndarray - 结果将保持为 recarray。
ufuncs 的‘out’关键字参数现在接受数组元组
当使用 ufunc 的‘out’关键字参数时,可以提供一个数组元组,每个 ufunc 输出一个数组。对于具有单个输出的 ufunc,单个数组也是有效的‘out’关键字参数。以前,可以在‘out’关键字参数中提供单个数组,并且它将用作具有多个输出的 ufunc 的第一个输出,现在已被弃用,并且现在会导致DeprecationWarning,并且将来会导致错误。
现在,使用字节数组索引会引发 IndexError
在 Python 3 中使用字节字符串对 ndarray 进行索引现在会引发 IndexError 而不是 ValueError。
包含具有数组的对象的掩码数组
对于这种(罕见的)掩码数组,获取单个掩码项不再返回损坏的掩码数组,而是完全掩码的项。
当遇到无效值时,中位数会发出警告并返回 nan
类似于 mean、median 和 percentile,现在在存在NaN的切片中发出 Runtime 警告并返回NaN。要计算中位数或百分位数而忽略无效值,请使用新的nanmedian或nanpercentile函数。
从 numpy.ma.testutils 中可用的函数已更改
numpy.testing 中的所有函数曾经都可以从 numpy.ma.testutils 中获得,但并非所有函数都重新定义为与掩码数组一起工作。现在,大多数这些函数已从 numpy.ma.testutils 中删除,仅保留了一个小子集,以保持向后兼容性。从长远来看,这应该有助于避免错误使用错误的函数,但可能会导致一些导入问题。
新功能
从 site.cfg 中读取额外的标志
以前,只能通过对 distutils 包中的代码更改来自定义依赖库和 numpy 本身的编译。现在���numpy.distutils 从每个site.cfg组中读取以下额外的标志:
-
runtime_library_dirs/rpath
,设置运行时库目录以覆盖LD_LIBRARY_PATH
-
extra_compile_args
,在编译源代码时添加额外的标志 -
extra_link_args
,在链接库时添加额外的标志
这应该至少部分完成用户自定义。
np.cbrt用于计算实浮点数的立方根
np.cbrt包装了 C99 的立方根函数cbrt。与np.power(x, 1./3.)相比,它对负实数浮点数有明确定义,并且速度稍快。
numpy.distutils 现在允许并行编译
通过将–parallel=n或-j n传递给setup.py build,现在可以在n个并行进程中执行扩展的编译。并行化仅限于一个扩展内的文件,因此使用 Cython 的项目不会受益,因为它从单个文件构建扩展。
genfromtxt有一个新的max_rows
参数
向 genfromtxt 添加了一个 max_rows
参数,用于限制在单次调用中读取的行数。使用此功能,可以通过多次调用该函数来读取存储在单个文件中的多个数组。
用于调用数组广播的新函数 np.broadcast_to
np.broadcast_to 手动将数组广播到给定形状,遵循 numpy 的广播规则。该功能类似于 broadcast_arrays,实际上已经重写为在内部使用 broadcast_to,但只需要��个数组。
用于测试警告的新上下文管理器 clear_and_catch_warnings
当 Python 发出警告时,它会记录该警告是在导致警告的模块中发出的,记录在一个模块属性 __warningregistry__
中。一旦发生这种情况,除非清除 __warningregistry__
中相关条目,否则将无法再次发出警告。这使得测试警告变得困难且脆弱,因为如果您的测试在已经导致警告的其他测试之后进行,您将无法发出警告或测试它。上下文管理器 clear_and_catch_warnings
在进入时清除模块注册表中的警告,并在退出时重置它们,这意味着警告可以被重新引发。
cov 函数有新的 fweights
和 aweights
参数
fweights
和 aweights
参数通过对观测向量应用两种类型的加权来为协方差计算添加新功能。fweights
数组表示每个观测向量的重复次数,而 aweights
数组提供它们的相对重要性或概率。
Python 3.5+ 支持‘@’运算符
Python 3.5 添加了支持矩阵乘法运算符‘@’的功能,该功能在 PEP465 中提出。已经实现了对该功能的初步支持,并且还添加了一个等效函数 matmul
用于测试目的和在较早版本的 Python 中使用。该函数是初步的,其可选参数的顺序和数量可能会发生变化。
fft 函数的新参数 norm
默认的归一化使直接变换不缩放,而逆变换按 (1/n) 缩放。可以通过将关键字参数 norm
设置为 "ortho"
(默认为 None)来获得单位变换,这样直接和逆变换都将按 (1/\sqrt{n}) 缩放。
从 site.cfg 中读取额外的标志
以前,对依赖库和 numpy 本身的编译定制只能通过在 distutils 包中进行代码更改来实现。现在,numpy.distutils 从每个 site.cfg 组中读取以下额外的标志:
-
runtime_library_dirs/rpath
,设置运行时库目录以覆盖LD_LIBRARY_PATH
-
extra_compile_args
,在编译源代码时添加额外的标志 -
extra_link_args
,在链接库时添加额外的标志
这应该至少部分完成用户自定义。
np.cbrt 用于计算实数浮点数的立方根
np.cbrt 包装了 C99 立方根函数cbrt。与np.power(x, 1./3.) 相比,它对负实数浮点数有明确定义,并且速度稍快。
numpy.distutils 现在允许并行编译
通过将–parallel=n或-j n传递给setup.py build,现在可以在n个并行进程中执行扩展的编译。并行化仅限于一个扩展内的文件,因此使用 Cython 的项目不会受益,因为它会从单个文件构建扩展。
genfromtxt有一个新的max_rows
参数
genfromtxt添加了一个max_rows
参数,用于限制在单次调用中读取的行数。使用此功能,可以通过多次调用该函数来读取存储在单个文件中的多个数组。
用于调用数组广播的新函数np.broadcast_to
np.broadcast_to 手动将数组广播到给定形状,符合 numpy 的广播规则。该功能类似于 broadcast_arrays,实际上已经重写为在内部使用 broadcast_to,但只需要一个数组。
用于测试警告的新上下文管理器clear_and_catch_warnings
当 Python 发出警告时,它记录了在引发警告的模块中发出了该警告,记录在模块属性__warningregistry__
中。一旦发生这种情况,除非清除__warningregistry__
中相关条目,否则不可能再次发出警告。这使得测试警告变得困难且脆弱,因为如果你的测试在已经引发警告的另一个测试之后进行,你将无法再次发出警告或测试它。上下文管理器clear_and_catch_warnings
在进入时清除模块注册表中的警告,并在退出时重置它们,这意味着警告可以被重新引发。
cov有新的fweights
和aweights
参数
fweights
和aweights
参数通过将两种类型的加权应用于观测向量,为协方差计算添加了新功能。fweights
数组表示每个观测向量的重复次数,而aweights
数组提供它们的相对重要性或概率。
Python 3.5+中对‘@’运算符的支持
Python 3.5 添加了对 PEP465 中提出的矩阵乘法运算符‘@’的支持。已经实现了对其的初步支持,并且还添加了一个等效函数matmul
用于测试目的和在较早的 Python 版本中使用。该函数是初步的,其可选参数的顺序和数量可能会发生变化。
fft 函数的新参数norm
默认归一化使直接变换未经缩放,而逆变换则被缩放为(1/n)。通过将关键字参数norm
设置为"ortho"
(默认为None),可以获得单位 ary 变换,这样直接和逆变换都将被缩放为(1/\sqrt{n})。
改进
np.digitize 使用二分查找
np.digitize 现在基于 np.searchsorted 实现。这意味着使用二进制搜索对值进行分箱,对于较大数量的箱,比以前的线性搜索更具规模性。它还消除了输入数组必须为 1 维的要求。
np.poly 现在将整数输入转换为浮点数
np.poly 现在将 1 维输入数组的整数类型转换为双精度浮点数,以防止计算单项式时整数溢出。仍然可以通过传入填充了 Python 整数等对象类型数组来获得更高精度的结果。
np.interp 现在可以与周期函数一起使用
np.interp 现在具有一个新参数 period,用于提供输入数据 xp 的周期。在这种情况下,输入数据将被正确归一化到给定周期,并且在 xp 的每个极端添加一个端点,以关闭前一个和下一个周期循环,从而实现正确的插值行为。
np.pad 支持更多输入类型的 pad_width
和 constant_values
constant_values
参数现在接受 NumPy 数组和浮点值。NumPy 数组被支持作为 pad_width
的输入,并且如果其值不是整数类型,则会引发异常。
np.argmax 和 np.argmin 现在支持 out
���数
np.argmax 和 np.argmin 添加了 out
参数,以保持与 ndarray.argmax 和 ndarray.argmin 的一致性。新参数的行为与这些方法完全相同。
检测到并使用更多系统 C99 复数函数
现在检测到 complex.h
中的所有函数。以下函数有新的回退实现。
-
npy_ctan,
-
npy_cacos, npy_casin, npy_catan
-
npy_ccosh, npy_csinh, npy_ctanh,
-
npy_cacosh, npy_casinh, npy_catanh
由于这些改进,返回值将有一些小的变化,特别是对于边缘情况。
np.loadtxt 支持由 float.hex
方法生成的字符串
由 float.hex
生成的字符串看起来像 0x1.921fb54442d18p+1
,因此这不是用于表示无符号整数类型的十六进制。
np.isclose 现在正确处理整数 dtypes 的最小值
为了正确处理整数类型的最小值,np.isclose 在比较过程中现在会转换为浮点 dtype。这使其行为与 np.allclose 提供的行为一致。
np.allclose 现在在内部使用 np.isclose。
np.allclose 现在在内部使用 np.isclose,并通过设置 equal_nan=True
继承了比较 NaNs 相等的能力。现在也保留了子类,如 np.ma.MaskedArray。
np.genfromtxt 现在可以正确处理大整数
np.genfromtxt 现在在 32 位系统上正确处理大于 2**31-1
的整数,在 64 位系统上正确处理大于 2**63-1
的整数(在这些情况下,它以前会崩溃并显示 OverflowError
)。大于 2**63-1
的整数被转换为浮点值。
np.load, np.save 具有 pickle 向后兼容标志
函数np.load和np.save有额外的关键字参数,用于控制反向兼容性的 pickled Python 对象。这使得 Python 3 上的 Numpy 可以加载包含在 Python 2 上生成的对象数组的 npy 文件。
MaskedArray 支持更复杂的基类
内置假设基类的行为类似于普通数组正在被移除。特别是,设置和获取元素和范围将尊重__setitem__
和__getitem__
的基类覆盖,并且算术将尊重__add__
,__sub__
等的覆盖。
np.digitize使用二分查找
np.digitize现在是基于np.searchsorted实现的。这意味着使用二分查找来对值进行分箱,对于更大数量的箱来说比以前的线性搜索更有效。它还消除了输入数组必须是一维的要求。
np.poly现在将整数输入转换为浮点数
np.poly现在将整数类型的一维输入数组转换为双精度浮点数,以防止计算单调多项式时发生整数溢出。仍然可以通过传入一个对象类型的数组(例如填充了 Python ints)来获得更高精度的结果。
np.interp现在可以与周期函数一起使用
np.interp现在有一个新参数period,用于提供输入数据xp的周期。在这种情况下,输入数据将被正确归一化到给定的周期,并且在xp的每个极端处添加一个端点,以关闭前一个和下一个周期循环,从而实现正确的插值行为。
np.pad支持更多输入类型的pad_width
和constant_values
constant_values
参数现在接受 NumPy 数组和浮点值。NumPy 数组作为pad_width
的输入得到支持,如果其值不是整数类型,则会引发异常。
np.argmax和np.argmin现在支持out
参数
np.argmax和np.argmin添加了out
参数,以保持与ndarray.argmax和ndarray.argmin的一致性。新参数的行为与这些方法中的行为完全相同。
检测并使用更多系统 C99 复数函数
所有complex.h
中的函数现在都被检测到了。以下函数有新的回退实现。
-
npy_ctan,
-
npy_cacos, npy_casin, npy_catan
-
npy_ccosh, npy_csinh, npy_ctanh,
-
npy_cacosh, npy_casinh, npy_catanh
由于这些改进,返回值将有一些小的变化,特别是在边界情况下。
np.loadtxt支持由float.hex
方法产生的字符串
由float.hex
生成的字符串看起来像0x1.921fb54442d18p+1
,因此这不是用于表示无符号整数类型的十六进制。
np.isclose正确处理整数 dtype 的最小值
为了正确处理整数类型的最小值,在比较过程中np.isclose现在会将其转换为浮点数 dtype。这使其行为与np.allclose提供的行为一致。
np.allclose在内部使用np.isclose。
np.allclose现在在内部使用np.isclose,并通过设置equal_nan=True
继承了比较 NaNs 相等的能力。子类,如np.ma.MaskedArray,现在也被保留。
np.genfromtxt现在可以正确处理大整数
np.genfromtxt现在可以正确处理 32 位系统上大于2**31-1
和 64 位系统上大于2**63-1
的整数(在这些情况下,以前会出现OverflowError
)。大于2**63-1
的整数将被转换为浮点值。
np.load、np.save具有 pickle 向后兼容标志
函数np.load和np.save现在具有额外的关键字参数,用于控制 pickled Python 对象的向后兼容性。这使得 Python 3 上的 Numpy 可以加载包含在 Python 2 上生成的对象数组的 npy 文件。
MaskedArray 支持更复杂的基类
内置假设基类的行为类似于普通数组的假设正在被移除。特别是,设置和获取元素和范围将尊重基类对__setitem__
和__getitem__
的覆盖,算术运算将尊重__add__
、__sub__
等的覆盖。
变更
dotblas 功能移至 multiarray
dot、inner 和 vdot 的 cblas 版本已集成到 multiarray 模块中。特别是,vdot 现在是一个 multiarray 函数,以前不是。
更严格检查 gufunc 签名的合规性
广义通用函数的输入现在更严格地根据函数的签名进行检查:所有核心维度现在都必须存在于输入数组中;具有相同标签的核心维度必须具有完全相同的大小;输出核心维度必须被指定,可以通过相同标签的输入核心维度或通过传入的输出数组来指定。
从np.einsum返回的视图是可写的
从np.einsum返回的视图现在只要输入数组可写,就可以进行写操作。
np.argmin跳过 NaT 值
np.argmin现在在 datetime64 和 timedelta64 数组中跳过 NaT 值,使其与np.min、np.argmax和np.max保持一致。
dotblas 功能移至 multiarray
dot、inner 和 vdot 的 cblas 版本已集成到 multiarray 模块中。特别是,vdot 现在是一个 multiarray 函数,以前不是。
更严格检查 gufunc 签名的合规性
广义通用函数的输入现在更严格地根据函数的签名进行检查:所有核心维度现在都必须存在于输入数组中;具有相同标签的核心维度必须具有完全相同的大小;输出核心维度必须被指定,可以通过相同标签的输入核心维度或通过传入的输出数组来指定。
从np.einsum返回的视图是可写的
从np.einsum返回的视图现在只要输入数组可写,就可以进行写操作。
np.argmin跳过 NaT 值
np.argmin 现在在 datetime64 和 timedelta64 数组中跳过 NaT 值,使其与 np.min、np.argmax 和 np.max 保持一致。
弃用
涉及字符串或结构化 dtype 的数组比较
通常,数组上的比较操作执行逐元素比较并返回布尔数组。但在一些特殊情况下,特别是涉及字符串或结构化 dtype 的情况下,NumPy 通常返回标量。例如:
### Current behaviour
np.arange(2) == "foo"
# -> False
np.arange(2) < "foo"
# -> True on Python 2, error on Python 3
np.ones(2, dtype="i4,i4") == np.ones(2, dtype="i4,i4,i4")
# -> False
在 1.9 版本开始的工作将在 1.10 版本中引发 FutureWarning
或 DeprecationWarning
,未来将修改为与其他比较操作更一致的行为,例如:
### Future behaviour
np.arange(2) == "foo"
# -> array([False, False])
np.arange(2) < "foo"
# -> error, strings and numbers are not orderable
np.ones(2, dtype="i4,i4") == np.ones(2, dtype="i4,i4,i4")
# -> [False, False]
SafeEval
numpy/lib/utils.py
中的 SafeEval
类已被弃用,并将在下一个版本中移除。
alterdot
、restoredot
alterdot
和 restoredot
函数不再起作用,并已被弃用。
pkgload
、PackageLoader
这些加载包的方式现在已被弃用。
corrcoef
函数的 bias
、ddof
参数
corrcoef
函数的 bias
和 ddof
参数在相关系数所暗示的除法中被取消,并且对返回值没有影响。
我们现在弃用 corrcoef
和掩码数组版本 ma.corrcoef
中的这些参数。
因为我们正在弃用 ma.corrcoef
的 bias
参数,所以我们也弃用 allow_masked
参数作为位置参数的使用,因为其位置将随着 bias
的移除而改变。allow_masked
最终将成为一个仅限关键字的参数。
dtype 字符串表示更改
从 1.6 版本开始,从字符串表示中创建 dtype 对象,例如 'f4'
,如果大小与现有类型不对应,则会发出弃用警告,并默认创建一个默认大小的 dtype 类型。从这个版本开始,这将引发 TypeError
。
唯一的例外是对象 dtype,其中 'O4'
和 'O8'
仍将发出弃用警告。这种平台相关的表示将在下一个版本中引发错误。
为了准备即将到来的更改,对象 dtype 的字符串表示,即 np.dtype(object).str
,不再包括项目大小,即将返回 '|O'
而不是之前的 '|O4'
或 '|O8'
。
涉及字符串或结构化 dtype 的数组比较
通常,数组上的比较操作执行逐元素比较并返回布尔数组。但在一些特殊情况下,特别是涉及字符串或结构化 dtype 的情况下,NumPy 通常返回标量。例如:
### Current behaviour
np.arange(2) == "foo"
# -> False
np.arange(2) < "foo"
# -> True on Python 2, error on Python 3
np.ones(2, dtype="i4,i4") == np.ones(2, dtype="i4,i4,i4")
# -> False
在 1.9 版本开始的工作将在 1.10 版本中引发 FutureWarning
或 DeprecationWarning
,未来将修改为与其他比较操作更一致的行为,例如:
### Future behaviour
np.arange(2) == "foo"
# -> array([False, False])
np.arange(2) < "foo"
# -> error, strings and numbers are not orderable
np.ones(2, dtype="i4,i4") == np.ones(2, dtype="i4,i4,i4")
# -> [False, False]
SafeEval
numpy/lib/utils.py
中的 SafeEval
类已被弃用,并将在下一个版本中移除。
alterdot
、restoredot
alterdot
和 restoredot
函数不再起作用,并已被弃用。
pkgload,PackageLoader
这些加载包的方式现在已被弃用。
corrcoef
的 bias、ddof 参数
corrcoef
函数的bias
和ddof
参数的值在相关系数所暗示的除法中被取消,因此对返回值没有影响。
我们现在弃用了corrcoef
和掩码数组版本ma.corrcoef
中的这些参数。
因为我们正在弃用ma.corrcoef
的bias
参数,所以我们也弃用了allow_masked
参数作为位置参数的使用,因为其位置将随着bias
的移除而改变。allow_masked
最终将成为一个仅限关键字的参数。
dtype 字符串表示更改
从 1.6 版本开始,从其字符串表示中创建 dtype 对象,例如'f4'
,如果大小与现有类型不对应,则会发出弃用警告,并默认创建该类型的默认大小的 dtype。从这个版本开始,这将引发TypeError
。
唯一的例外是对象 dtypes,其中'O4'
和'O8'
仍将发出弃用警告。这种依赖平台的表示将在下一个版本中引发错误。
为了准备即将到来的更改,对象 dtype 的字符串表示,即np.dtype(object).str
,不再包括项目大小,即将返回'|O'
,而不是以前的'|O4'
或'|O8'
。
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 人为这个版本做出了贡献。名字后面带有“+”的人第一次贡献了一个补丁。
NumPy 1.7.2 发行说明
这是 1.7.x 系列中仅进行错误修复的发布。它支持 Python 2.4 - 2.7 和 3.1 - 3.3,并且是最后一个支持 Python 2.4 - 2.5 的系列。
修复的问题
-
gh-3153: 当未填充足够时不要重用 nditer 缓冲区
-
gh-3192: f2py 崩溃导致 UnboundLocalError 异常
-
gh-442: 使用 axis=None 连接现在需要相等数量的数组元素
-
gh-2485: 修复 astype(‘S’) 字符串截断问题
-
gh-3312: count_nonzero 中的错误
-
gh-2684: 在某些条件下 numpy.ma.average 将复数转换为浮点数
-
gh-2403: 具有命名组件的掩码数组的行为与预期不符
-
gh-2495: np.ma.compress 处理输入顺序错误
-
gh-576: 为 ma.mvoid 添加 len 方法
-
gh-3364: 减少 mmap 切片的性能回归
-
gh-3421: 修复 GetStridedCopySwap 中的非交换分片复制
-
gh-3373: 修复 datetime 元数据初始化中的小泄漏
-
gh-2791: 将特定于平台的 python 包含目录添加到搜索路径
-
gh-3168: 修复未定义函数并添加整数除法
-
gh-3301: memmap 在 python3 中无法与 TemporaryFile 一起使用
-
gh-3057: distutils.misc_util.get_shared_lib_extension 返回错误的调试扩展
-
gh-3472: 将模块扩展添加到 load_library 搜索列表
-
gh-3324: 使比较函数(gt、ge 等)尊重 array_priority
-
gh-3497: np.insert 在参数 ‘axis=-1’ 下表现不正确
-
gh-3541: 使 halffloat.c 中的预处理器测试一致
-
gh-3458: array_ass_boolean_subscript() 将‘不存在’的数据写入数组
-
gh-2892: ufunc.reduceat 在零大小索引数组中的回归
-
gh-3608: 从元组填充结构时的回归
-
gh-3701: 添加对 Python 3.4 ast.NameConstant 的支持
-
gh-3712: 不要假设 GIL 在 xerbla 中启用
-
gh-3712: 修复 lapack_litemodule 中的 LAPACK 错误处理
-
gh-3728: f2py 修复对错误对象的 decref
-
gh-3743: Python 3.3 中哈希更改签名
-
gh-3793: 64 位 python3 中标量整数哈希损坏
-
gh-3160: 在 Mac OS X 10.8.3 上轻松安装 1.7.0 的 SandboxViolation
-
gh-3871: npy_math.h 在具有 SUNWspro12.2 的 Solaris 上具有无效的 isinf
-
gh-2561: 在 python3 中禁用对旧式类的检查
-
gh-3900: 确保 NotImplemented 在 MaskedArray ufunc 中传递
-
gh-2052: 删除标量下标导致段错误
-
gh-3832: 修复几个未初始化使用和内存泄漏
-
gh-3971: f2py 将 string.lowercase 更改为 string.ascii_lowercase 以用于 python3
-
gh-3480: numpy.random.binomial 对 n == 0 抛出 ValueError
-
gh-3992: hypot(inf, 0) 不应引发警告,hypot(inf, inf) 结果错误
-
gh-4018: 处理非常大数组时出现分段错误
-
gh-4094: 修复 _strided_to_strided_string_to_datetime 中的 NaT 处理
-
gh-4051: 修复 _strided_to_strided_string_to_datetime 中的未初始化使用
-
gh-4123: lexsort 段错误
-
gh-4141: 修复在 python 3.4b1 中出现的一些问题
修复的问题
-
gh-3153: 当未填充足够时不要重用 nditer 缓冲区
-
gh-3192: f2py 崩溃导致 UnboundLocalError 异常
-
gh-442: 使用 axis=None 连接现在需要相等数量的数组元素
-
gh-2485: 修复 astype('S') 字符串截断问题
-
gh-3312: count_nonzero 中的错误
-
gh-2684: 在某些条件下,numpy.ma.average 将复数转换为浮点数
-
gh-2403: 具有命名组件的掩码数组行为不符合预期
-
gh-2495: np.ma.compress 处理输入的顺序错误
-
gh-576: 为 ma.mvoid 添加 len 方法
-
gh-3364: 减少 mmap 切片的性能回归
-
gh-3421: 修复 GetStridedCopySwap 中的非交换分步复制
-
gh-3373: 修复 datetime 元数据初始化中的小泄漏
-
gh-2791: 将特定平台的 Python 包含目录添加到搜索路径中
-
gh-3168: 修复未定义函数并添加整数除法
-
gh-3301: memmap 在 python3 中无法与 TemporaryFile 一起使用
-
gh-3057: distutils.misc_util.get_shared_lib_extension 返回错误的调试扩展
-
gh-3472: 将模块扩展添加到 load_library 搜索列表
-
gh-3324: 使比较函数(gt, ge, …)尊重 array_priority
-
gh-3497: np.insert 在参数 'axis=-1' 下表现不正确
-
gh-3541: 使 halffloat.c 中的预处理器测试一致
-
gh-3458: array_ass_boolean_subscript() 将 '不存在' 的数据写入数组
-
gh-2892: ufunc.reduceat 中带有零大小索引数组的回归
-
gh-3608: 从元组填充结构时出现回归
-
gh-3701: 添加对 Python 3.4 ast.NameConstant 的支持
-
gh-3712: 不要假设 xerbla 中启用了 GIL
-
gh-3712: 修复 lapack_litemodule 中的 LAPACK 错误处理
-
gh-3728: f2py 修复对错误对象的减少引用
-
gh-3743: Python 3.3 中 hash 更改了签名
-
gh-3793: 64 位 python3 上的标量整数哈希功能失效
-
gh-3160: 在 Mac OS X 10.8.3 上安装 easyinstalling 1.7.0 时出现 SandboxViolation
-
gh-3871: npy_math.h 在具有 SUNWspro12.2 的 Solaris 上具有无效的 isinf
-
gh-2561: 在 python3 中禁用对旧式类的检查
-
gh-3900: 确保 MaskedArray ufunc 中传递了 NotImplemented
-
gh-2052: 删除标量下标导致段错误
-
gh-3832: 修复一些未初始化使用和内存泄漏
-
gh-3971: f2py 将 string.lowercase 更改为 string.ascii_lowercase 以适应 python3
-
gh-3480: numpy.random.binomial 对 n == 0 引发 ValueError
-
gh-3992: hypot(inf, 0) 不应引发警告,hypot(inf, inf) 结果错误
-
gh-4018: 处理非常大的数组时出现分段错误
-
gh-4094: 修复 _strided_to_strided_string_to_datetime 中的 NaT 处理
-
gh-4051: 修复 _strided_to_strided_string_to_datetime 中的未初始化使用
-
gh-4123: lexsort 分段错误
-
gh-4141: 修复在 python 3.4b1 中出现的一些问题
NumPy 1.7.1 发布说明
这是 1.7.x 系列中仅修复错误的发布。它支持 Python 2.4 - 2.7 和 3.1 - 3.3,并且是最后一个支持 Python 2.4 - 2.5 的系列。
问题已解决
-
gh-2973: 修复 1 在 numpy.test() 中打印出来的问题
-
gh-2983: BUG: gh-2969: 回溯内存泄漏修复 80b3a34。
-
gh-3007: 回溯 gh-3006
-
gh-2984: 回溯修复复数多项式拟合
-
gh-2982: BUG: 使 nansum 与布尔值一起工作。
-
gh-2985: 回溯大排序修复
-
gh-3039: 回溯对象获取
-
gh-3105: 回溯 nditer 修复 op 轴初始化
-
gh-3108: BUG: Bento 构建后 npy-pkg-config ini 文件丢失。
-
gh-3124: BUG: PyArray_LexSort 分配了太多临时内存。
-
gh-3131: BUG: 导出的 f2py_size 符号阻止链接多个 f2py 模块。
-
gh-3117: 回溯 gh-2992
-
gh-3135: DOC: 添加 PyArray_SetBaseObject 偷取引用的提及
-
gh-3134: DOC: 修复 fft 文档中的拼写错误(索引变量为‘m’,而不是‘n’)。
-
gh-3136: 回溯 #3128
问题已解决
-
gh-2973: 修复 1 在 numpy.test() 中打印出来的问题
-
gh-2983: BUG: gh-2969: 回溯内存泄漏修复 80b3a34。
-
gh-3007: 回溯 gh-3006
-
gh-2984: 回溯修复复数多项式拟合
-
gh-2982: BUG: 使 nansum 与布尔值一起工作。
-
gh-2985: 回溯大排序修复
-
gh-3039: 回溯对象获取
-
gh-3105: 回溯 nditer 修复 op 轴初始化
-
gh-3108: BUG: Bento 构建后 npy-pkg-config ini 文件丢失。
-
gh-3124: BUG: PyArray_LexSort 分配了太多临时内存。
-
gh-3131: BUG: 导出的 f2py_size 符号阻止链接多个 f2py 模块。
-
gh-3117: 回溯 gh-2992
-
gh-3135: DOC: 添加 PyArray_SetBaseObject 偷取引用的提及
-
gh-3134: DOC: 修复 fft 文档中的拼写错误(索引变量为‘m’,而不是‘n’)。
-
gh-3136: 回溯 #3128
NumPy 1.7.0 发行说明
此版本包括几个新功能以及大量的错误修复和重构。它支持 Python 2.4 - 2.7 和 3.1 - 3.3,并且是最后一个支持 Python 2.4 - 2.5 的版本。
亮点
-
where=
参数用于 ufuncs(允许使用布尔数组选择计算应该在哪里进行) -
vectorize
改进(添加了“excluded”和“cache”关键字,进行了一般清理和错误修复) -
numpy.random.choice
(随机样本生成函数)
兼容性说明
在未来的 numpy 版本中,函数 np.diag、np.diagonal 和 ndarrays 的 diagonal 方法将返回对原始数组的视图,而不是像现在一样生成副本。如果您向这些函数返回的数组写入数据,这将产生差异。为了促进这一过渡,如果 numpy 1.7 检测到您可能正在尝试向这样的数组写入数据,它会产生一个 FutureWarning。有关详细信息,请参阅 np.diagonal 的文档。
与上面的 np.diagonal 类似,在未来的 numpy 版本中,通过字段名称列表对记录数组进行索引将返回对原始数组的视图,而不是像现在一样生成副本。与 np.diagonal 一样,如果 numpy 1.7 检测到您可能正在尝试向这样的数组写入数据,它会产生一个 FutureWarning。有关详细信息,请参阅数组索引的文档。
在未来的 numpy 版本中,UFunc 的默认转换规则将从“unsafe”更改为“same_kind”(这也适用于像 a += b 这样的原地操作,它等同于 np.add(a, b, out=a))。大多数违反“same_kind”规则的用法可能是错误,因此此更改可能会暴露依赖于 NumPy 的项目中以前未检测到的错误。在这个版本的 numpy 中,这样的用法将继续成功,但会引发 DeprecationWarning。
完整数组布尔索引已经优化为使用不同的、优化的代码路径。这个代码路径应该产生相同的结果,但对于您代码的任何变化的反馈将不胜感激。
尝试向只读数组(arr.flags.writeable
设置为False
的数组)写入数据以前会不一致地引发 RuntimeError、ValueError 或 TypeError,具体取决于采取的代码路径。现在它会一致地引发 ValueError。
<ufunc>.reduce
函数以与以前版本的 NumPy 不同的顺序评估一些缩减操作,通常提供更高的性能。由于浮点运算的性质,这可能会微妙地改变一些结果,就像将 NumPy 链接到不同的 BLAS 实现(如 MKL)一样。
如果从 1.5 版本升级,那么在 1.6 和 1.7 版本中通常会添加大量代码并更改一些代码路径,特别是在类型解析和通用函数的缓冲迭代领域。这可能会对您的代码产生影响,特别是如果您过去依赖于偶然行为。
新功能
Reduction UFuncs 泛化 axis=参数
任何 ufunc.reduce 函数调用,以及其他减少操作如 sum、prod、any、all、max 和 min 都支持选择要减少的轴的能力。以前,可以说 axis=None 表示所有轴或 axis=#表示选择单个轴。现在,还可以说 axis=(#,#)来选择要减少的轴列表。
Reduction UFuncs 新的 keepdims=参数
有一个新的 keepdims=参数,如果设置为 True,则不会丢弃减少轴,而是将它们设置为大小为一。当设置此选项时,减少结果将正确广播到原始被减少的操作数。
日期时间支持
注意
1.7.0 版本中的 datetime API 是实验性的,可能会在未来的 NumPy 版本中发生变化。
与 NumPy 1.6 相比,datetime64 有许多修复和增强:
-
解析器非常严格,只接受 ISO 8601 日期,带有一些方便的扩展。
-
正确转换单位
-
日期时间算术运算正确
-
工作日功能(允许日期时间在只有某些周几有效的情况下使用)
应查阅doc/source/reference/arrays.datetime.rst中的注释(也可在arrays.datetime.html的在线文档中找到)以获取更多详细信息。
用于打印数组的自定义格式化程序
查看numpy.set_printoptions
函数的新formatter
参数。
新函数 numpy.random.choice
添加了一个通用的抽样函数,它将从给定的类似数组中生成样本。样本可以有或没有替换,并且具有均匀或给定的非均匀概率。
新函数 isclose
返回一个布尔数组,其中两个数组在容差范围内逐元素相等。可以指定相对容差和绝对容差。
多项式包中的初步多维支持
在积分和微分函数中添加了轴关键字,并添加了一个张量关键字到评估函数中。这些添加允许在这些函数中使用多维系数数组。还添加了用于在网格或点集上评估 2-D 和 3-D 系数数组的新函数,以及用于拟合的 2-D 和 3-D 伪范德蒙矩阵。
能够填充秩为 n 的数组
添加了一个包含用于填充 n 维数组的函数的 pad 模块。各种私有填充函数作为公共'pad'函数的选项暴露出来。示例:
pad(a, 5, mode='mean')
当前模式有 constant
, edge
, linear_ramp
, maximum
, mean
, median
, minimum
, reflect
, symmetric
, wrap
和 <function>
。
searchsorted 的新参数
函数 searchsorted 现在接受一个 ‘sorter’ 参数,这是一个对数组进行排序的排列数组。
构建系统
增加了对 AArch64 架构的实验性支持。
C API
新函数 PyArray_FailUnlessWriteable
提供了一个一致的接口用于检查数组的可写性 - 任何在不事先知道数组 WRITEABLE 标志为 True 的 C 代码,在写入之前应该确保调用这个函数。
添加了 NumPy C 风格指南 (doc/C_STYLE_GUIDE.rst
)。
变更
一般
函数 np.concatenate 尝试匹配其输入数组的布局。以前,布局没有遗留任何特定的原因,并且以不希望的方式依赖于选择连接的特定轴。还修复了一个错误,该错误默默允许超出边界的轴参数。
ufuncs logical_or、logical_and 和 logical_not 现在遐循 Python 对象数组的行为,而不是尝试在对象上调用方法。例如表达式 (3 and ‘test’) 产生字符串 ‘test’,现在 np.logical_and(np.array(3, ‘O’), np.array(‘test’, ‘O’)) 也产生 ‘test’。
在 ndarrays 上的 .base
属性,用于在视图上确保内存的基础数组不会过早释放,现���在视图的视图中引用时会折叠出引用。例如:
a = np.arange(10)
b = a[1:]
c = b[1:]
在 numpy 1.6 中,c.base
是 b
,c.base.base
是 a
。在 numpy 1.7 中,c.base
是 a
。
为了增加对旧版本 .base
行为的向后兼容性,我们只会‘跳过’与新创建视图具有完全相同类型的对象。如果您使用 ndarray
子类,这将产生差异。例如,如果我们有一组 ndarray
和 matrix
对象,它们都是对同一个原始 ndarray
的视图:
a = np.arange(10)
b = np.asmatrix(a)
c = b[0, 1:]
d = c[0, 1:]
那么 d.base
将是 b
。这是因为 d
是一个 matrix
对象,所以当遇到其他 matrix
对象时,折叠过程仅继续进行。它按照 c
、b
和 a
的顺序考虑,而 b
是该列表中最后一个是 matrix
对象的条目。
强制转换规则
由于 NA 相关工作,强制转换规则在一些边缘情况下发生了变化。特别是对于标量+标量的组合:
-
longlong 类型 (q) 现在在与任何其他数字 (? b h i l q p B H I) 进行操作时仍然保持为 longlong,之前被强制转换为 int_ (l)。ulonglong 类型 (Q) 现在保持为 ulonglong 而不是 uint (L)。
-
timedelta64 类型 (m) 现在可以与任何整数类型 (b h i l q p B H I L Q P) 混合使用,之前会引发 TypeError。
对于数组 + 标量,上述规则只是广播,除非数组和标量是无符号/有符号整数,然后结果会转换为数组类型(可能更大的大小),如下面的示例所示:
>>> (np.zeros((2,), dtype=np.uint8) + np.int16(257)).dtype
dtype('uint16')
>>> (np.zeros((2,), dtype=np.int8) + np.uint16(257)).dtype
dtype('int16')
>>> (np.zeros((2,), dtype=np.int16) + np.uint32(2**17)).dtype
dtype('int32')
数量是否增加取决于标量的大小,例如:
>>> (np.zeros((2,), dtype=np.uint8) + np.int16(255)).dtype
dtype('uint8')
>>> (np.zeros((2,), dtype=np.uint8) + np.int16(256)).dtype
dtype('uint16')
complex128
标量 + float32
数组也会转换为 complex64
。
在 NumPy 1.7 中,datetime64 类型 (M) 必须通过显式指定类型作为第二个参数来构造(例如 np.datetime64(2000, 'Y')
)。
弃用
通用
使用 _format 数组属性指定自定义字符串格式化器已被弃用。可以改用 numpy.set_printoptions
或 numpy.array2string
中的新 formatter 关键字。
多项式包中的已弃用导入已被移除。
如果 concatenate
的 axis != 0
,现在会为 1D 数组引发 DepractionWarning。numpy < 1.7.0 版本忽略了 1D 数组的 axis 参数值。我们现在允许这样做,但在适当的时候我们会引发错误。
C-API
已弃用对 PyArrayObject* 字段的直接访问。多个版本已经不推荐直接访问。为了准备 NumPy 2.0,未来可能会对 PyArray_Descr* 和其他核心对象进行类似的弃用。
old_defines.h 中的宏已被弃用,并将在下一个主要版本(>= 2.0)中删除。可以使用 sed 脚本 tools/replace_old_macros.sed 将这些宏替换为更新版本。
您可以通过在包含任何 NumPy 头文件之前添加一行 #define NPY_NO_DEPRECATED_API
和目标版本号(例如 NPY_1_7_API_VERSION
)来针对弃用的 C API 测试您的代码。
NPY_TYPES
枚举的 NPY_CHAR
成员已被弃用,并将在 NumPy 1.8 中删除。有关更多详细信息,请参阅 gh-2801 中的讨论。
亮点
-
where=
参数用于 ufuncs(允许使用布尔数组选择计算应该在哪里进行) -
vectorize
改进(添加了 'excluded' 和 'cache' 关键字,进行了一般清理和错误修复) -
numpy.random.choice
(随机样本生成函数)
兼容性说明
在未来的 numpy 版本中,函数 np.diag、np.diagonal 和 ndarrays 的 diagonal 方法将返回原始数组的视图,而不是像现在一样生成副本。如果您向这些函数返回的数组写入数据,这将产生差异。为了促进这一过渡,numpy 1.7 在检测到您可能试图向这样的数组写入数据时会产生 FutureWarning。有关详细信息,请参阅 np.diagonal 的文档。
与上述 np.diagonal 类似,在未来的 numpy 版本中,通过字段名称列表对记录数组进行索引将返回原始数组的视图,而不是像现在一样生成副本。与 np.diagonal 一样,numpy 1.7 在检测到您可能试图向这样的数组写入数据时会产生 FutureWarning。有关详细信息,请参阅数组索引的文档。
在未来的 numpy 版本中,UFunc out=
参数的默认转换规则将从‘unsafe’更改为‘same_kind’。 (这也适用于像 a += b
这样的原地操作,它等同于 np.add(a, b, out=a)
。)违反‘same_kind’规则的大多数用法可能是错误,因此此更改可能会暴露依赖于 NumPy 的项目中以前未检测到的错误。在这个 numpy 版本中,这样的用法将继续成功,但会引发 DeprecationWarning。
完整数组布尔索引已经优化为使用不同的、优化的代码路径。这个代码路径应该产生相同的结果,但对于代码变化的任何反馈将不胜感激。
尝试向只读数组(arr.flags.writeable
设置为 False
的数组)写入以前会不一致地引发 RuntimeError、ValueError 或 TypeError,取决于采取的代码路径。现在它会一致地引发 ValueError。
<ufunc>.reduce
函数在 NumPy 的先前版本中以不同的顺序执行一些缩减操作,通常提供更高的性能。由于浮点运算的性质,这可能会微妙地改变一些结果,就像将 NumPy 链接到不同的 BLAS 实现(如 MKL)一样。
如果从 1.5 升级,那么在 1.6 和 1.7 中通常添加了大量代码,并且一些代码路径已经改变,特别是在类型解析和通用函数的缓冲迭代领域。这可能会对您的代码产生影响,特别是如果您过去依赖于意外行为。
新功能
缩减 UFuncs 泛化 axis=
参数
任何 ufunc.reduce
函数调用,以及其他缩减操作如 sum、prod、any、all、max 和 min 支持选择要缩减的轴的能力。以前,可以说 axis=None
表示所有轴或 axis=#
表示选择单个轴。现在,还可以说 axis=(#,#)
来选择要缩减的轴列表。
缩减 UFuncs 新的 keepdims=
参数
有一个新的 keepdims=
参数,如果设置为 True,则不会丢弃缩减轴,而是将它们设置为大小为一。当设置此选项时,缩减结果将正确广播到原始被缩减的操作数。
日期时间支持
注意
1.7.0 版本中的日期时间 API 是实验性的,可能会在未来的 NumPy 版本中发生变化。
与 NumPy 1.6 相比,datetime64 有很多修复和增强:
-
解析器对只接受 ISO 8601 日期非常严格,带有一些方便的扩展
-
正确地转换单位
-
日期时间算术运算正常工作
-
工作日功能(允许日期时间在只有某些周几有效的情境中使用)
应查阅 doc/source/reference/arrays.datetime.rst 中的注释(也可在在线文档 arrays.datetime.html 中找到)以获取更多详细信息。
用于打印数组的自定义格式化程序
查看 numpy.set_printoptions
函数的新 formatter
参数。
新函数 numpy.random.choice
添加了一个通用的抽样函数,可以从给定的类似数组中生成样本。样本可以是有放回或无放回的,并且可以具有均匀或给定的非均匀概率。
新函数 isclose
返回一个布尔数组,其中两个数组在容差范围内逐元素相等。可以指定相对容差和绝对容差。
多项式包中的初步多维支持
对积分和微分函数添加了轴关键字,并添加了一个张量关键字到评估函数中。这些添加允许在这些函数中使用多维系数数组。还添加了用于在网格或点集上评估 2-D 和 3-D 系数数组的新函数,以及可用于拟合的 2-D 和 3-D 伪范德蒙矩阵。
能够填充秩为 n 的数组
添加了一个包含用于填充 n 维数组的函数的 pad 模块。各种私有填充函数作为公共 'pad' 函数的选项暴露出来。示例:
pad(a, 5, mode='mean')
当前模式为 constant
、edge
、linear_ramp
、maximum
、mean
、median
、minimum
、reflect
、symmetric
、wrap
和 <function>
。
searchsorted 的新参数
函数 searchsorted 现在接受一个 'sorter' 参数,该参数是对数组进行排序的排列数组。
构建系统
添加了对 AArch64 架构的实验性支持。
C API
新函数 PyArray_FailUnlessWriteable
提供了一个一致的接口来检查数组的可写性 - 任何使用 WRITEABLE 标志未知为 True 的数组的 C 代码,在写入之前应确保调用此函数。
添加了 NumPy C 风格指南(doc/C_STYLE_GUIDE.rst
)。
缩减 UFuncs 泛化 axis= 参数
任何 ufunc.reduce 函数调用,以及其他缩减函数如 sum、prod、any、all、max 和 min 支持选择要缩减的轴的能力。以前,可以说 axis=None 表示所有轴或 axis=# 选择单个轴。现在,还可以说 axis=(#,#) 选择要缩减的轴列表。
缩减 UFuncs 新 keepdims= 参数
新的 keepdims= 参数,如果设置为 True,则不会丢弃缩减轴,而是将它们设置为大小为一。当设置此选项时,缩减结果将正确广播到原始被缩减的操作数。
日期时间支持
注意
1.7.0 版本中的日期时间 API 是 实验性的,可能在 NumPy 的未来版本中发生变化。
与 NumPy 1.6 相比,datetime64 有许多修复和增强:
-
解析器对仅接受 ISO 8601 日期非常严格,具有一些方便的扩展
-
在单位之间正确转换
-
日期时间算术运算正确
-
工作日功能(允许日期时间在仅某些周几有效的情境中使用)
应该查阅 doc/source/reference/arrays.datetime.rst 中的注释(也可以在在线文档 arrays.datetime.html 中找到更多详细信息)。
用于打印数组的自定义格式化程序
查看 numpy.set_printoptions
函数的新 formatter
参数。
新功能 numpy.random.choice
添加了一个通用的抽样函数,它将从给定的类似数组中生成样本。样本可以是有放回或无放回的,并且可以具有均匀或给定的非均匀概率。
新函数 isclose
返回一个布尔数组,其中两个数组在容差范围内逐元素相等。可以指定相对容差和绝对容差。
多项式包中的初步多维支持
在积分和微分函数中添加了轴关键字,并添加了一个张量关键字到评估函数中。这些添加允许在这些函数中使用多维系数数组。还添加了用于在网格或点集上评估 2-D 和 3-D 系数数组的新函数,以及用于拟合的 2-D 和 3-D 伪范德蒙矩阵。
能够填充秩为 n 的数组
添加了一个包含用于填充 n 维数组的函数的 pad 模块。各种私有填充函数作为公共 'pad' 函数的选项暴露。示例:
pad(a, 5, mode='mean')
当前模式为 constant
, edge
, linear_ramp
, maximum
, mean
, median
, minimum
, reflect
, symmetric
, wrap
, 和 <function>
。
searchsorted 的新参数
函数 searchsorted 现在接受一个 'sorter' 参数,该参数是一个对数组进行排序的排列数组。
构建系统
添加了对 AArch64 架构的实验性支持。
C API
新函数 PyArray_FailUnlessWriteable
提供了一个一致的接口,用于检查数组的可写性 - 任何使用数组的 C 代码,在写入之前应该确保调用此函数。
添加了 NumPy C 风格指南(doc/C_STYLE_GUIDE.rst
)。
变更
一般
函数 np.concatenate 尝试匹配其输入数组的布局。以前,布局没有遵循任何特定的原因,并且以一种不希望的方式依赖于选择用于连接的特定轴。还修复了一个错误,以前允许静默地使用超出范围的轴参数。
现在,ufuncs logical_or、logical_and 和 logical_not 遵循 Python 在对象数组上的行为,而不是尝试在对象上调用方法。例如,表达式(3 and ‘test’)会产生字符串‘test’,现在 np.logical_and(np.array(3, ‘O’), np.array(‘test’, ‘O’))也会产生‘test’。
在 ndarrays 上的.base
属性,用于在视图上确保内存所有权的基础数组不会过早释放,现在在视图的视图中引用时会折叠引用。例如:
a = np.arange(10)
b = a[1:]
c = b[1:]
在 numpy 1.6 中,c.base
是b
,c.base.base
是a
。在 numpy 1.7 中,c.base
是a
。
为了增加对依赖于.base
旧行为的软件的向后兼容性,我们只会‘跳过’与新创建视图具有完全相同类型的对象。如果使用ndarray
子类,这会产生差异。例如,如果我们有一组ndarray
和matrix
对象,它们都是对同一原始ndarray
的视图:
a = np.arange(10)
b = np.asmatrix(a)
c = b[0, 1:]
d = c[0, 1:]
然后d.base
将是b
。这是因为d
是一个matrix
对象,所以折叠过程只会在遇到其他matrix
对象时继续进行。它按顺序考虑c
、b
和a
,而b
是列表中最后一个是matrix
对象的条目。
转换规则
由于 NA 相关工作,转换规则在一些边缘情况下发生了变化。特别是对于标量+标量的组合:
-
longlong类型(q)现在与任何其他数字(? b h i l q p B H I)进行操作时仍保持为longlong,以前会转换为int_(l)。ulonglong类型(Q)现在保持为ulonglong,而不是uint(L)。
-
timedelta64类型(m)现在可以与任何整数类型(b h i l q p B H I L Q P)混合使用,以前会引发TypeError。
对于数组+标量,上述规则只是广播,除非数组和标量是无符号/有符号整数,然后结果会转换为数组类型(可能更大)如下例所示:
>>> (np.zeros((2,), dtype=np.uint8) + np.int16(257)).dtype
dtype('uint16')
>>> (np.zeros((2,), dtype=np.int8) + np.uint16(257)).dtype
dtype('int16')
>>> (np.zeros((2,), dtype=np.int16) + np.uint32(2**17)).dtype
dtype('int32')
增加的大小取决于标量的大小,例如:
>>> (np.zeros((2,), dtype=np.uint8) + np.int16(255)).dtype
dtype('uint8')
>>> (np.zeros((2,), dtype=np.uint8) + np.int16(256)).dtype
dtype('uint16')
同样,complex128
标量+float32
数组会转换为complex64
。
在 NumPy 1.7 中,datetime64类型(M)必须通过显式指定类型作为第二个参数来构造(例如np.datetime64(2000, 'Y')
)。
通用
函数 np.concatenate 尝试匹配其输入数组的布局。以前,布局没有遵循任何特定原因,并且以一种不希望的方式取决于选择用于连接的特定轴。还修复了一个允许超出边界轴参数的错误。
现在,ufuncs logical_or、logical_and 和 logical_not 遵循 Python 在对象数组上的行为,而不是尝试在对象上调用方法。例如,表达式(3 and ‘test’)会产生字符串‘test’,现在 np.logical_and(np.array(3, ‘O’), np.array(‘test’, ‘O’))也会产生‘test’。
在 ndarrays 上的 .base
属性,用于在视图上确保拥有内存的底层数组不会过早释放,现在在视图的视图中折叠引用。例如:
a = np.arange(10)
b = a[1:]
c = b[1:]
在 numpy 1.6 中,c.base
是 b
,而 c.base.base
是 a
。在 numpy 1.7 中,c.base
是 a
。
为了增加对依赖于旧版本 .base
行为的软件的向后兼容性,我们只会‘跳过’与新创建视图具有完全相同类型的对象。如果我们有一组 ndarray
和 matrix
对象,它们都是同一个原始 ndarray
的视图:
a = np.arange(10)
b = np.asmatrix(a)
c = b[0, 1:]
d = c[0, 1:]
然后 d.base
将会是 b
。这是因为 d
是一个 matrix
对象,所以只有在遇到其他 matrix
对象时,折叠过程才会继续进行。它按照 c
、b
和 a
的顺序考虑,而 b
是列表中最后一个 matrix
对象。
转换规则
转换规则在一些边缘情况下发生了一些变化,这是由于 NA 相关工作。特别是对于标量+标量的组合:
-
longlong 类型 (q) 现在在与任何其他数字 (? b h i l q p B H I) 进行操作时仍保持为 longlong,以前它被转换为 int_ (l)。ulonglong 类型 (Q) 现在保持为 ulonglong 而不是 uint (L)。
-
timedelta64 类型 (m) 现在可以与任何整数类型 (b h i l q p B H I L Q P) 混合,以前会引发 TypeError。
对于数组 + 标量,上述规则只是广播,除非数组和标量是无符号/有符号整数,那么结果会转换为数组类型(可能更大的大小),如下例所示:
>>> (np.zeros((2,), dtype=np.uint8) + np.int16(257)).dtype
dtype('uint16')
>>> (np.zeros((2,), dtype=np.int8) + np.uint16(257)).dtype
dtype('int16')
>>> (np.zeros((2,), dtype=np.int16) + np.uint32(2**17)).dtype
dtype('int32')
是否增加大小取决于标量的大小,例如:
>>> (np.zeros((2,), dtype=np.uint8) + np.int16(255)).dtype
dtype('uint8')
>>> (np.zeros((2,), dtype=np.uint8) + np.int16(256)).dtype
dtype('uint16')
一个 complex128
标量 + float32
数组会被转换为 complex64
。
在 NumPy 1.7 中,datetime64 类型 (M) 必须通过显式指定类型作为第二个参数来构造(例如 np.datetime64(2000, 'Y')
)。
弃用
一般
使用 _format 数组属性指定自定义字符串格式化程序已被弃用。可以使用 numpy.set_printoptions
或 numpy.array2string
中的新 formatter 关键字代替。
多项式包中的已弃用导入已被移除。
concatenate
现在对于 1D 数组如果 axis != 0
会引发 DepractionWarning。numpy < 1.7.0 版本对于 1D 数组忽略了 axis 参数值。我们暂时允许这样,但在适当的时候我们会引发错误。
C-API
已弃用对 PyArrayObject* 字段的直接访问。对于许多版本,已经不推荐直接访问。为了为 NumPy 2.0 做准备,未来可能会对 PyArray_Descr* 和其他核心对象进行类似的弃用。
old_defines.h 中的宏已被弃用,并将在下一个主要版本(>= 2.0)中删除。sed 脚本 tools/replace_old_macros.sed 可用于将这些宏替换为更新版本。
您可以通过在包含任何 NumPy 头文件之前添加一行由 #define NPY_NO_DEPRECATED_API
和目标版本号(如 NPY_1_7_API_VERSION
)组成的代码来针对弃用的 C API 测试您的代码。
NPY_TYPES
枚举的 NPY_CHAR
成员已被弃用,并将在 NumPy 1.8 中移除。有关更多详细信息,请参阅 gh-2801 上的讨论。
一般
使用 _format 数组属性指定自定义字符串格式化程序已被弃用。可以改用 numpy.set_printoptions
或 numpy.array2string
中的新 formatter 关键字。
多项式包中的已弃用导入已被移除。
如果 axis != 0
,concatenate
现在会为 1D 数组引发 DepractionWarning。numpy < 1.7.0 版本忽略了 1D 数组的 axis 参数值。我们暂时允许这样,但在适当的时候我们将引发错误。
C-API
已弃用对 PyArrayObject* 字段的直接访问。对于许多版本,已经不推荐直接访问。作为准备 NumPy 2.0 的一部分,未来可能会对 PyArray_Descr* 和其他核心对象进行类似的弃用。
旧的 old_defines.h 中的宏已被弃用,并将在下一个主要版本发布(>= 2.0)时移除。可以使用 sed 脚本 tools/replace_old_macros.sed 将这些宏替换为更新版本。
您可以通过在包含任何 NumPy 头文件之前添加一行由 #define NPY_NO_DEPRECATED_API
和目标版本号(如 NPY_1_7_API_VERSION
)组成的代码来针对弃用的 C API 测试您的代码。
NPY_TYPES
枚举的 NPY_CHAR
成员已被弃用,并将在 NumPy 1.8 中移除。有关更多详细信息,请参阅 gh-2801 上的讨论。
NumPy 1.6.2 Release Notes
这是 1.6.x 系列的 Bug 修复版本。由于 NumPy 1.7.0 版本的延迟,该版本包含的修复远远超过常规的 NumPy Bug 修复版本。它还包括了许多文档和构建的改进。
修复的问题
numpy.core
-
2063: 使 unique() 返回一致的索引
-
1138: 允许从空缓冲区或空切片创建数组
-
1446: 更正关于对应 vstack 和 concatenate 的说明
-
1149: 使 argmin() 适用于日期时间
-
1672: 使 allclose() 对标量 inf 起作用
-
1747: 使 np.median() 对 0-D 数组起作用
-
1776: 正确使复数被零除以 inf
-
1675: 为 format() 函数添加标量支持
-
1905: 明确检查 allclose() 中的 NaN
-
1952: 允许 std() 和 var() 中的浮动 ddof
-
1948: 修复索引 chararrays 为空列表的回归
-
2017: 修复类型哈希
-
2046: 删除数组属性会导致段错误
-
2033: a**2.0 有错误的类型
-
2045: 使属性/iterator_element 删除不会导致段错误
-
2021: 修复 searchsorted() 中的段错误
-
2073: 修复 float16 array_interface bug
numpy.lib
-
2048: 打破 NpzFile 中的引用循环
-
1573: savetxt() 现在处理复杂数组
-
1387: 允许 bincount() 接受空数组
-
1899: 修复带有空输入的 histogramdd() 错误
-
1793: 修正 py3k 下 npyio 测试失败
-
1936: 修复子数组 dtype 的额外嵌套
-
1848: 使 tril/triu 返回与原始数组相同的 dtype
-
1918: 使用 Py_TYPE 访问 ob_type,这样在 Py3 下也能工作
numpy.distutils
-
1261: 将 AIX 上的编译标志从 -O5 更改为 -O3
-
1377: 更新 HP 编译器标志
-
1383: 在 HPUX 上更好地支持 C++ 代码
-
1857: 修复 py3k + pip 的构建
-
BLD: 在没有清理的情况下构建时提出更清晰的警告
-
BLD: 在 build_clib 中遵循 build_ext 编码规范
-
BLD: 修复在 system_info.py 中检测 Intel CPU 在 OS X 上的问题
-
BLD: 在 Ubuntu 和其他发行版上添加对新的 X11 目录结构的支持
-
BLD: 将 ufsparse 添加到库搜索路径中。
-
BLD: 将‘pgfortran’添加为 Portland Group 中的一个有效编译器
-
BLD: 更新 IBM AIX Fortran 编译器的版本匹配正则表达式。
numpy.random
- BUG: 在 mtrand 中使用 npy_intp 而不是 long
变化
numpy.f2py
-
ENH: 引入新的选项 extra_f77_compiler_args 和 extra_f90_compiler_args
-
BLD: 改进对 fcompiler 值的报告
-
BUG: 修复 f2py test_kind.py 测试
numpy.poly
-
ENH: 为多项式打印添加一些测试
-
ENH: 添加伴随矩阵函数
-
DOC: 重新排列多项式文档
-
BUG: 修复到类的链接
-
DOC: 在多项式包模块中添加版本信息
-
DOC: 在多项式包模块中记录 xxxfit 函数的使用方法
-
BUG: 多项式方便类让不同类型相互作用
-
DOC: 记录多项式方便类的使用
-
DOC: 改进多项式类的 numpy 参考文档
-
ENH:改进从根数计算多项式
-
STY:在多项式[*]fromroots 函数中进行代码清理
-
DOC:删除对 cast 和 NA 的引用,这些是在 1.7 版本中添加的
问题已解决
numpy.core
-
2063:使 unique()返回一致的索引
-
1138:允许从空缓冲区或空切片创建数组
-
1446:关于 vstack 和 concatenate 对应关系的说明正确
-
1149:使 argmin()适用于日期时间
-
1672:修复 allclose()对标量 inf 的工作问题
-
1747:使 np.median()适用于 0-D 数组
-
1776:使复数除以零正确地产生 inf
-
1675:为 format()函数添加标量支持
-
1905:显式检查 allclose()中的 NaN
-
1952:在 std()和 var()中允许浮动 ddof
-
1948:修复使用空列表索引 chararrays 的回归问题
-
2017:修复类型哈希
-
2046:���除数组属性导致段错误
-
2033:a**2.0 类型不正确
-
2045:使属性/迭代器元素删除不会导致段错误
-
2021:修复 searchsorted()中的段错误
-
2073:修复 float16 array_interface 的 bug
numpy.lib
-
2048:在 NpzFile 中断开引用循环
-
1573:savetxt()现在支持复杂数组
-
1387:允许 bincount()接受空数组
-
1899:修复带有空输入的 histogramdd()bug
-
1793:修复 py3k 下 npyio 测试失败
-
1936:修复子数组数据类型的额外嵌套
-
1848:使 tril/triu 返回与原始数组相同的数据类型
-
1918:使用 Py_TYPE 访问 ob_type,因此在 Py3 上也可以正常工作
numpy.distutils
-
1261:将 AIX 上的编译标志从-O5 更改为-O3
-
1377:更新 HP 编译器标志
-
1383:为 HPUX 上的 C++代码提供更好的支持
-
1857:修复 py3k + pip 的构建问题
-
BLD:在未清理构建的情况下发出更清晰的警告
-
BLD:在 build_clib 中遵循 build_ext 编码规范
-
BLD:在 system_info.py 中修复在 OS X 上检测到 Intel CPU 的问题
-
BLD:为 Ubuntu 和其他系统的新 X11 目录结构添加支持。
-
BLD:将 ufsparse 添加到库搜索路径中。
-
BLD:将‘pgfortran’添加为 Portland Group 中的有效编译器
-
BLD:更新适用于 IBM AIX Fortran 编译器的版本匹配正则表达式。
numpy.random
- BUG:在 mtrand 中使用 npy_intp 而不是 long
numpy.core
-
2063:使 unique()返回一致的索引
-
1138:允许从空缓冲区或空切片创建数组
-
1446:关于 vstack 和 concatenate 对应关系的说明正确
-
1149:使 argmin()适用于日期时间
-
1672:修复 allclose()对标量 inf 的工作问题
-
1747:使 np.median()适用于 0-D 数组
-
1776:使复数除以零正确地产生 inf
-
1675:为 format()函数添加标量支持
-
1905:显式检查 allclose()中的 NaN
-
1952:在 std()和 var()中允许浮动 ddof
-
1948:修复使用空列表索引 chararrays 的回归问题
-
2017:修复类型哈希
-
2046:删除数组属性导致段错误
-
2033:a**2.0 类型不正确
-
2045:使属性/迭代器元素删除不会导致段错误
-
2021:修复 searchsorted()中的段错误
-
2073:修复 float16 array_interface 的 bug
numpy.lib
-
2048:在 NpzFile 中断开引用循环
-
1573: savetxt()现在可以处理复杂数组
-
1387: 允许 bincount() 接受空数组
-
1899: 修复带有空输入的 histogramdd() bug
-
1793: 在 py3k 下修复失败的 npyio 测试
-
1936: 修复子数组数据类型的额外嵌套
-
1848: 使 tril/triu 返回与原始数组相同的数据类型
-
1918: 使用 Py_TYPE 来访问 ob_type,这样也在 Py3 上工作
numpy.distutils
-
1261: 将 AIX 上的编译标志从 -O5 改为 -O3
-
1377: 更新 HP 编译器标志
-
1383: 在 HPUX 上为 C++ 代码提供更好的支持
-
1857: 为 py3k + pip 修复构建
-
BLD: 在没有首先清理的情况下建立时提出更清晰的警告
-
BLD: 在 build_clib 中遵循 build_ext 编码约定
-
BLD: 在 system_info.py 中修复对 OS X 上英特尔 CPU 的检测
-
BLD: 在 Ubuntu & co 上添加对新 X11 目录结构的支持。
-
BLD: 将 ufsparse 添加到库搜索路径中。
-
BLD: 将‘pgfortran’作为波特兰集团的有效编译器添加
-
BLD: 更新版本匹配正则表达式,以匹配 IBM AIX Fortran 编译器。
numpy.random
- BUG: 在 mtrand 中使用 npy_intp 而不是长整型
更改
numpy.f2py
-
ENH: 引入新选项 extra_f77_compiler_args 和 extra_f90_compiler_args
-
BLD: 改善 fcompiler 值的报告
-
BUG: 修复 f2py test_kind.py 测试
numpy.poly
-
ENH: 为多项式打印添加一些测试
-
ENH: 添加伴随矩阵函数
-
DOC: 重新整理多项式文件
-
BUG: 修复到类的链接
-
DOC: 在某些多项式包模块中添加添加版本
-
DOC: 在多项式包模块中的文档 xxxfit 函数
-
BUG: 多项式便利类让不同类型相互作用
-
DOC: 文档使用多项式便利类
-
DOC: 改善多项式类的 numpy 参考文档
-
ENH: 改进从根计算多项式
-
STY: 多项式[*]fromroots 函数中的代码清理
-
DOC: 删除在 1.7 版本中添加的对 cast 和 NA 的引用
numpy.f2py
-
ENH: 引入新选项 extra_f77_compiler_args 和 extra_f90_compiler_args
-
BLD: 改善 fcompiler 值的报告
-
BUG: 修复 f2py test_kind.py 测试
numpy.poly
-
ENH: 为多项式打印添加一些测试
-
ENH: 添加伴随矩阵函数
-
DOC: 重新整理多项式文件
-
BUG: 修复到类的链接
-
DOC: 在某些多项式包模块中添加添加版本
-
DOC: 在多项式包模块中的文档 xxxfit 函数
-
BUG: 多项式便利类让不同类型相互作用
-
DOC: 文档使用多项式便利类
-
DOC: 改善多项式类的 numpy 参考文档
-
ENH: 改进从根计算多项式
-
STY: 多项式[*]fromroots 函数中的代码清理
-
DOC: 删除在 1.7 版本中添加的对 cast 和 NA 的引用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2021-06-24 如何评价「施一公请辞清华大学副校长,全职执掌西湖大学」?你如何看待西湖大学的发展前景?