1

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

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

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

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 的要点?

谢谢!

4

2 回答 2

4

使用numpy.ma返回一个掩码。也就是说,它隐藏(掩盖)所有符合条件的东西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.

于 2016-10-17T14:28:33.400 回答
2

你会想要使用

np.ma.MaskedArray(data,mask)

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

weather < downtime

要按您的意愿工作,“天气”需要是一个数组而不是一个列表,所以:

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

请注意,我使用 '>=' 而不是 '<' 来获得所需的结果

于 2016-10-17T14:29:12.830 回答