Python 帮助有条件地使用另一个列表中的 'numpy.masked_where'

Python help using 'numpy.masked_where' conditionally from another list

我正在写一个天文观测模拟。我有一个数据数组,每 24 小时测量 1 次:

data = [0,1,2,3,4]

我有一个数组,它是 24 小时内 cloud/rain 的分钟数,四舍五入到最接近的小时:

weather = [0,60,120,180,0]

我想使用掩码数组根据天气数组中的值隐藏数据数组中的值。屏蔽对于进一步的绘图和数据分析很重要(而不是删除)。

因此,如果我只想显示停机时间小于 120 分钟的数据点,我会这样做:

downtime = 120

data_masked = np.ma.masked_where(weather < downtime, data)

这应该导致:

data_masked = [0, 1, ---, ---, 4]

但是我的data_masked好像是相反的。如果我在同一个轴上绘制我的数据和天气。我正在掩盖天气停机时间低于我的阈值的点。

我试过反转运算符,它似乎保留了所有内容。任何想法或者我是否错过了 numpy.ma 的要点?

谢谢!

使用numpy.mareturns一个面具。也就是说,它 隐藏 (掩码)符合条件 weather < downtime 的所有内容。如果你想显示符合条件的一切,只需反转条件:

data = np.array([0,1,2,3,4])
weather = np.array([0,60,120,180,0])
downtime = 120
data_masked = np.ma.masked_where(weather >= downtime, data)
data_masked

那么输出将是:

masked_array(data = [0 1 -- -- 4], 
             mask = [False False  True  True False],
             fill_value = 999999)

要访问数据,请使用 data_masked.data

你会想要使用

np.ma.MaskedArray(data,mask)

请注意,掩码指定要屏蔽的数据。另外,对于以下类型的操作

weather < downtime

要按您的预期工作,'weather' 需要是数组而不是列表,因此:

weather = np.array([0,60,120,180,0])
...
data_masked=np.ma.MaskedArray(data, weather >= downtime)

请注意,我使用“>=”而不是“<”来获得您需要的结果