NEP 17 — 拆分屏蔽数组#
- 作者:
斯特凡·范德沃尔特< stefanv @伯克利。教育>
- 地位:
拒绝
- 类型:
标准轨道
- 创建:
2018-03-22
- 解决:
https://mail.python.org/pipermail/numpy-discussion/2018-May/078026.html
抽象的#
该 NEP 建议从 NumPy 中删除 MaskedArray 功能,并将其作为独立包发布。
详细说明#
MaskedArrays 是 NumPy 的子类,ndarray
它添加了屏蔽功能,即在计算过程中忽略或隐藏某些数组值的能力。
虽然历史上在 NumPy 内部分发此类很方便,但改进的包装使得可以毫无困难地单独分发它。
此举的动机包括:
重点:NumPy 包应该努力只包含 ndarray对象,以及操作此类数组所需的基本实用程序。
复杂性:MaskedArray 的实现并不简单,并且会带来很大的维护负担。
兼容性:MaskedArray 对象是ndarrays的子类[ 1 ],与其他包一起使用时通常会导致复杂性。解决这些问题超出了 NumPy 开发的范围。
该 NEP 提出了一种弃用途径,用户仍可以通过该途径访问 MaskedArrays,但不再作为核心包的一部分。
执行#
目前,MaskedArray 的创建方式如下:
from numpy import ma
ma.array([1, 2, 3], mask=[True, False, True])
这将返回一个数组,其中值 1 和 3 被屏蔽(对于np.sum等操作不再可见)。
我们建议将np.ma子包重构为一个名为maskedarray [ 2 ]的新的 pip 可安装库,该库将以类似的方式使用:
import maskedarray as ma
ma.array([1, 2, 3], mask=[True, False, True])
对于 NumPy 的两个版本,maskedarray将成为 NumPy 依赖项,并将以现有名称 np.ma公开 MaskedArrays 。如果导入为np.ma,则会引发NumpyDeprecationWarning,描述即将弃用的内容,并说明如何修改代码以使用maskedarray。
两次发布后,np.ma将被完全删除。为了获取 np.ma,用户将通过pip install或通过他们的包管理器安装它。随后,在完整包含 maskedarray 的 NumPy 版本上导入 maskedarray将引发ImportError。
文档#
NumPy 的内部文档在某些地方明确引用了 MaskedArrays,例如ndarray.concatenate:
> 当要连接的一个或多个数组是 MaskedArray 时, > 此函数将返回一个 MaskedArray 对象而不是 ndarray, > 但输入掩码不会保留。如果需要 MaskedArray > 作为输入,请改用 masked > array 模块中的 ma.concatenate 函数。
此类文档将被删除,因为期望maskedarray的用户将使用该包中的方法来操作 MaskedArray。
其他出场#
显式 MaskedArray 支持将从以下位置删除:
numpygenfromtext
numpy.libmerge_arrays , numpy.lib.stack_arrays
向后兼容性#
对于 NumPy 的两个版本,除了弃用通知之外,不会有任何用户可见的更改。此后,np.ma将不再可用(相反,MaskedArrays 将位于maskedarray 包中)。
另请注意,类数组对象上的新 PEP 最终可能会为 MaskedArray 提供比当前可用的更好的支持。
备择方案#
经过邮件列表上的热烈讨论:
人们支持(并且积极感兴趣)制作更好的新掩码数组类。
新类应该是外部 NumPy API 的使用者,没有特殊的地位(不像今天,代码库中有一些 hack 来支持它)
MaskedArray将保留在原来的位置,至少直到新的屏蔽数组类实现并在野外进行尝试为止。
参考文献和脚注#
版权所有#
本文档已置于公共领域。