python - 如何将掩码从一个数组应用到另一个数组?

标签 python numpy

我已经多次阅读屏蔽数组文档,到处搜索,感觉非常愚蠢。我无法弄清楚如何将掩码从一个阵列应用到另一个阵列。

例子:

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]

所以这很好用....但是要绘制这个 y 轴,我需要一个匹配的 x 轴。如何将 y 数组中的掩码应用于 x 数组?这样的事情是有道理的,但会产生垃圾:

new_x = x[m.mask].copy()
new_x
array([5])

那么,到底是怎么做到的(注意新的 x 数组必须是一个新的数组)。

编辑:

嗯,似乎有一种方法可以像这样工作:

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]

但这太困惑了!我正在尝试找到一个像 IDL 一样优雅的解决方案...

最佳答案

我有一个类似的问题,但涉及加载更多的屏蔽命令和更多的数组来应用它们。我的解决方案是对一个数组进行所有屏蔽,然后使用最终屏蔽的数组作为 mask_where 命令中的条件。

例如:

y = np.array([2,1,5,2])                         # y axis
x = np.array([1,2,3,4])                         # x axis
m = np.ma.masked_where(y>5, y)                  # filter out values larger than 5
new_x = np.ma.masked_where(np.ma.getmask(m), x) # applies the mask of m on x

好消息是您现在可以将此掩码应用于更多数组,而无需对每个数组进行掩码处理。

关于python - 如何将掩码从一个数组应用到另一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16495298/

相关文章:

python - 根据索引值用系列填充多个缺失值

python - 对数组进行排序并将索引追溯到其排序顺序

python - 在 block 矩阵中排列 numpy 数组

python - 缓存非 View 返回

javascript - 如何使 Django 模板 HTML 文件加载 CSS/JS 而不将 Django 代码放入 HTML 文件中?

具有离散颜色图的 Python 2-D 直方图

python - 如何在 tensorflow 的回调中访问训练和测试数据?

python - 使用 Tensorflow 2.0 使用多个 GPU 进行训练时出现错误 : Out of range: End of sequence

numpy - 为什么谷歌云计算引擎比 numpy.dot 操作规范较低的专用服务器慢 100 倍

python - numpy.linalg.eigh 与 numpy.linalg.svd 相比如何?