我是一个新的python用户,我深入了解NumPy模块的工作原理。我正在写一个函数,它能够使用被屏蔽和未被屏蔽的数组作为数据输入。 我注意到有几个numpy masked operations看起来与其正常的(未掩盖的)对应物相似(甚至工作?)。其中一项功能是numpy.zeros
和numpy.ma.zeros
。有人能告诉我使用numpy.ma.zeros
与numpy.zeros
创建阵列的优势吗?当你使用屏蔽数组时,它会产生实际的差异吗?我注意到,当我使用numpy.zeros_like
时,它可以正常工作,用于创建一个掩码或未掩码的数组。Numpy蒙面操作
回答
np.ma.zeros
创建一个被屏蔽的数组而不是一个正常的数组,如果后面的某个操作对这个数组创建了无效值,这可能很有用。手册中的示例:
数组有时包含无效或缺失的数据。在对这样的阵列执行 操作时,我们希望抑制无效值,其中 是掩码阵列满足的目的(典型使用示例是 ,下面给出)。
例如,检查下面的数组:
>>> x = np.array([2, 1, 3, np.nan, 5, 2, 3, np.nan])
当我们试图以计算数据的平均值,其结果是 未确定:
>>> np.mean(x) nan
平均使用大致
np.sum(x)/len(x)
计算,但由于 任何编号添加到NaN
产生NaN
,这是行不通的。 输入蒙面阵列:>>> m = np.ma.masked_array(x, np.isnan(x)) >>> m masked_array(data = [2.0 1.0 3.0 -- 5.0 2.0 3.0 --], mask = [False False False True False False False True], fill_value=1e+20)
在这里,我们构建了一个蒙面阵列抑制所有
NaN
值。 我们现在可以着手计算其他值的平均值:>>> np.mean(m) 2.6666666666666665
谢谢你的明确解释。其实,在我的函数中,我使用'np.ma.mean'来代替'np.mean',因为你解释过的原因。我只是痴迷于理解'numpy.ma'类,特别是创建由0和1填充的数组。谢谢! – hurrdrought
作为一个初学者不要太陷入了蒙面阵列。它是np.ndarray
的一个子类,在处理具有某些在计算诸如平均值之类的内容时不希望忽略的错误值的数据时非常有用。但除此之外,您应该关注基础numpy类的创建和索引(以及计算)。
不仅是ma
数组的一个子类,它包含2个常规数组。一个人拥有数据,包括任何“不良”的价值观。这是一个普通的numpy数组。另一个是布尔数组,掩码。蒙面类的开发人员试图使它的行为与常规数组相同,但是添加了这种蒙版。大部分(如果不是全部的话)被屏蔽的数组的附加功能都是在Python代码中实现的。
很难理解numpy
的底层C代码,但看看在Python中实现的函数和方法是有益的。我经常在ipython
会话中看看那些,但是他们也可以在numpy的github存储库中学习。
感谢您的指导性意见。我也在用'numpy'学习_indexing_,因为它似乎是我需要建立高效函数(比如说矢量化)的一项主要技能。我只是沉迷于试图理解'numpy'阵列的'幕后'。谢谢! – hurrdrought
- 1. 聚合numpy蒙面阵列
- 2. Numpy位操作
- 3. 写入numpy中的蒙面数组
- 4. 分配给蒙面的numpy数组而不删除蒙版?
- 5. 蒙戈查询和操作
- 6. 改形/延伸numpy蒙版
- 7. numpy的数组操作
- 8. Numpy blockwise减少操作
- 9. Numpy diff倒置操作?
- 10. Numpy数组索引操作?
- 11. numpy - 沿指定轴操作
- 12. numpy meshgrid操作问题
- 13. numpy通用就地操作
- 14. 检查一个numpy数组是否是一个numpy蒙面数组
- 15. Python/NumPy第一次出现蒙面子阵
- 16. 计算几个numpy蒙面数组的平均值(masked_all)
- 17. 改变屏蔽值符号 - - 打印蒙面numpy的阵列
- 18. NumPy函数的元素操作比操作符更快吗?
- 19. 避免numpy为重载操作符分发操作
- 20. 在NumPy的执行操作arrray但这些操作
- 21. 如何在numPy中执行此操作?
- 22. Numpy:对NxM阵列(或行)的操作
- 23. 对numpy数组的条件操作
- 24. Python numpy数组合并操作
- 25. 使用numpy数组元素的操作
- 26. 将python操作转换为numpy
- 27. 对熊猫DataFrame的Numpy操作
- 28. numpy的滑动点阵操作
- 29. numpy数组的计算/操作
- 30. 矢量化numpy中的索引操作
为什么downvote?我在numpy网页上找不到关于此问题的任何有用信息。 – hurrdrought