我现在已经多次读过蒙面数组文档,到处搜索并感到非常愚蠢.我无法弄清楚我的生活如何将面具从一个阵列应用到另一个阵列.
例:
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]
Run Code Online (Sandbox Code Playgroud)
所以这很好....但要绘制这个y轴,我需要一个匹配的x轴.如何将y数组中的掩码应用于x数组?这样的事情会有意义,但会产生垃圾:
new_x = x[m.mask].copy()
new_x
array([5])
Run Code Online (Sandbox Code Playgroud)
那么,究竟是怎么做的(注意新的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]
Run Code Online (Sandbox Code Playgroud)
但那令人难以置信的凌乱!我正在努力寻找像IDL一样优雅的解决方案......
我想对存储为 numpy 数组的图像进行局部平均滤波器。图像在边缘附近有一些缺失的像素,用有效的掩码(布尔数组)表示。
我可以使用skimage.filters.rank,但我的图像超出了[-1, 1]范围,出于某种原因,scikit-image 要求这样做。
还有astropy.convolution,但它会插入缺失的数据。对于简单的均值,无需进行插值。仅平均有效像素。输入和输出有效掩码相同。
简单地将无效像素设置为零不是一种选择,因为它会污染附近的有效像素平均值。
还有这个 question,但它不是重复的,因为它询问更通用的卷积(这只是平均)。