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_PyFile_Dup 和 npy_PyFile_DupClose 已从 npy_3kcompat.h 中移除.

  • splitcmdline 已从 numpy/distutils/exec_command.py 中移除.

  • try_run 和 get_output 已从 numpy/distutils/command/config.py 中移除

  • a._format 属性不再支持数组打印.

  • 关键字 skiprowsmissing 已从 np.genfromtxt 中移除.

  • 关键字 old_behavior 已从 np.correlate 中移除.

未来变化#

  • arr1 == arr2 这样的数组比较中,涉及字符串或结构化 dtypes 的许多极端情况过去会返回标量,现在会发出 FutureWarningDeprecationWarning,未来将改为执行逐元素比较或引发错误.

  • 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') 以向后兼容的方式进行更新.旧的 'unsafe' 默认值自 Numpy 1.7 起已被弃用.

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.在将其设为默认值之前,还需要更多时间.作为路线图的一部分,还增加了对非 c_contiguous 数组的 f_contiguous 维度变化视图的弃用.

axis=0 以外的任何轴上连接一维数组会引发 IndexError#

自从 NumPy 1.7 以来,使用 axis != 0 已经引发了一个 DeprecationWarning,现在它引发了一个错误.

np.ravel, np.diagonalnp.diag 现在保留子类型#

x.ravel()np.ravel(x) 之间以及 x.diagonal()np.diagonal(x) 之间存在不一致的行为,方法保留了子类型而函数没有.这已经得到修复,现在函数的行为类似于方法,保留子类型,除了矩阵的情况.矩阵为了向后兼容仍然是特殊情况,仍然像以前一样返回1-D数组.如果你需要保留矩阵子类型,请使用方法而不是函数.

rollaxisswapaxes 总是返回一个视图#

之前,只有在轴的顺序没有改变的情况下才会返回输入数组,否则会返回一个视图.现在在所有情况下都会返回一个视图.

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.

‘out’ 关键字参数现在接受数组的元组#

当使用 ufunc 的 ‘out’ 关键字参数时,可以提供一个数组元组,每个 ufunc 输出一个数组.对于只有一个输出的 ufunc,单个数组也是一个有效的 ‘out’ 关键字参数.以前可以在 ‘out’ 关键字参数中提供单个数组,并将其用作具有多个输出的 ufunc 的第一个输出,这已被弃用,现在会导致 DeprecationWarning,将来会导致错误.

字节数组索引现在会引发 IndexError#

在 Python 3 中使用字节字符串索引 ndarray 现在会引发 IndexError 而不是 ValueError.

包含对象数组的掩码数组#

对于这种(罕见的)掩码数组,获取单个掩码项不再返回损坏的掩码数组,而是返回项的完全掩码版本.

当遇到无效值时,中位数警告并返回 nan#

类似于均值,中位数和百分位数现在在包含 NaN 的切片中发出运行时警告并返回 NaN.要计算中位数或百分位数同时忽略无效值,请使用新的 nanmediannanpercentile 函数.

从 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 参数#

max_rows 参数已添加到 genfromtxt 中,以限制单次调用中读取的行数.通过使用此功能,可以通过多次调用该函数来读取存储在单个文件中的多个数组.

新功能 np.broadcast_to 用于调用数组广播#

np.broadcast_to 根据 numpy 的广播规则手动将数组广播到给定的形状.该功能类似于 broadcast_arrays,后者实际上已被重写以在内部使用 broadcast_to,但只需要一个数组.

新的上下文管理器 clear_and_catch_warnings 用于测试警告#

当 Python 发出警告时,它会在引发警告的模块中记录该警告已在模块属性 __warningregistry__ 中发出.一旦发生这种情况,除非清除 __warningregistry__ 中的相关条目,否则无法再次发出警告.这使得测试警告变得困难和脆弱,因为如果您的测试在已经引发警告的另一个测试之后进行,您将无法发出警告或测试它.上下文管理器 clear_and_catch_warnings 在进入时清除模块注册表中的警告,并在退出时重置它们,这意味着可以重新引发警告.

cov 有新的 fweightsaweights 参数#

fweightsaweights 参数通过应用两种类型的加权到观测向量,为协方差计算增加了新功能.一个 fweights 数组表示每个观测向量的重复次数,一个 aweights 数组提供它们的相对重要性或概率.

对 Python 3.5+ 中 ‘@’ 运算符的支持#

Python 3.5 增加了对矩阵乘法运算符 ‘@’ 的支持,该运算符在 PEP465 中提出.已经实现了对该运算符的初步支持,并且为了测试目的和在早期 Python 版本中使用,还添加了一个等效函数 matmul.该函数是初步的,其可选参数的顺序和数量可能会发生变化.

新的参数 norm 用于 fft 函数#

默认的归一化对直接变换不进行缩放,逆变换则按 \(1/n\) 进行缩放.通过将关键字参数 norm 设置为 ``”ortho”``(默认是 None),可以获得酉变换,这样直接和逆变换都将按 \(1/\sqrt{n}\) 进行缩放.

改进#

np.poly 现在将整数输入转换为浮点数#

np.poly 现在会将一维整数类型输入数组转换为双精度浮点数,以防止在计算单项多项式时发生整数溢出.通过传入一个对象类型的数组(例如填充Python整数),仍然可以获得更高精度的结果.

np.interp 现在可以与周期函数一起使用#

np.interp 现在有一个新参数 period,它提供了输入数据 xp 的周期.在这种情况下,输入数据被适当地归一化到给定的周期,并且在 xp 的每个极值点添加一个端点,以关闭前一个和下一个周期循环,从而产生正确的插值行为.

np.pad 支持更多输入类型用于 pad_widthconstant_values#

constant_values 参数现在接受 NumPy 数组和浮点值.NumPy 数组作为 pad_width 的输入是被支持的,如果其值不是整数类型,则会引发异常.

np.argmaxnp.argmin 现在支持 out 参数#

out 参数被添加到 np.argmaxnp.argmin 中,以与 ndarray.argmaxndarray.argmin 保持一致.新参数在这些方法中的行为完全相同.

检测到并使用了更多系统 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 正确处理整数数据类型的最小值#

为了正确处理整数类型的最小值,*np.isclose* 现在在比较时会转换为浮点数类型.这使其行为与 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.loadnp.save 有额外的关键字参数用于控制序列化的 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.minnp.argmaxnp.max 保持一致.

弃用#

涉及字符串或结构化数据类型的数组比较#

通常,对数组进行的比较操作会执行逐元素比较并返回布尔数组.但在某些特殊情况下,尤其是涉及字符串和结构化数据类型时,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中,这些比较现在将引发 FutureWarningDeprecationWarning ,并且在未来它们将被修改以更一致地与其他比较操作行为,例如:

### 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 函数的 biasddof 参数在相关系数隐含的除法中被抵消,因此对返回的值没有影响.

我们现在不推荐使用这些参数给 corrcoef 和掩码数组版本 ma.corrcoef.

因为我们正在弃用 ma.corrcoefbias 参数,我们也弃用将 allow_masked 参数作为位置参数使用,因为它的位置将在移除 bias 后改变.``allow_masked`` 将在适当的时候成为仅限关键字的参数.

dtype 字符串表示的变化#

自1.6版本以来,从其字符串表示形式创建一个dtype对象,例如 'f4',如果大小与现有类型不对应,则会发出弃用警告,并默认创建一个默认大小的dtype.从这个版本开始,这将引发一个 TypeError.

唯一的例外是对象数据类型,其中 'O4''O8' 仍将发出弃用警告.这种平台相关的表示将在下一个版本中引发错误.

为了准备这次即将到来的更改,对象数据类型(即 np.dtype(object).str)的字符串表示不再包括项大小,即将返回 '|O' 而不是之前的 '|O4''|O8'.