有没有办法忽略用于屏蔽单独数组的数组中的屏蔽值?
Is there a way to disregard masked values in an array used to mask separate array?
我的数据是几个相同长度的数据数组。我正在屏蔽一个数组 (y),然后使用该屏蔽数组屏蔽第二个数组 (x)。我屏蔽 x 以去除指示设备错误 (-9999) 的值。然后我使用 np.where() 找出 y 在哪里较低(低于平均值 1 个标准偏差)来屏蔽 x 以便在 y 较低时查看 x 的值。
我曾多次尝试更改掩码,但 none 其他 numpy 掩码数组操作给了我不同的结果。我试图写一个逻辑语句来在 mask = FALSE 时给我值,但我不能在 np.where() 语句中这样做。
x = np.array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] )
y = np.array( [ 0, 1, -9999, 3, 4, 5, 6, 7, 8, -9999, 10 ] )
x = np.ma.masked_values( x, -9999 )
y = np.ma.masked_values( y, -9999 )
low_y = ( y.mean() - np.std( y ) )
x_masked = x[ np.where( y < low_y ) ]
当我们调用x_masked时,它returns:
>>>x_masked
masked_array(data=[0, 1, 2, 9],
mask=False,
fill_value=-9999)
我们期望 x_masked 的均值为 0.5 ( (0 + 1)/2 ),但由于包含在 x_masked。
有没有一种方法可以排除屏蔽值以便只获取未屏蔽值?
我想你会想在 y != -9999
的地方屏蔽 x
。如果您对代码进行此更改,它将按预期工作。
您也可以只使用 np.where
来屏蔽。
x = x[np.where(y != -9999)]
y = y[np.where(y != -9999)]
low_y = ( y.mean() - np.std( y ) )
x_masked = x[np.where( y < low_y)]
print (x_masked)
[0 1]
从 1.8 版开始,numpy 添加了 nanstd
and nanmean
来处理丢失的数据。在您的情况下,因为 -9999 在那里指示错误状态,根据定义,我认为这是 numpy.nan
的一个很好的用例
In [76]: y = np.where(y==-9999, np.nan, y)
In [77]: low_y = (np.nanmean(y) - np.nanstd(y))
In [78]: low_y
Out[78]: 1.8177166753143883
In [79]: x_masked = x[ np.where( y < low_y ) ] # [0, 1]
我的数据是几个相同长度的数据数组。我正在屏蔽一个数组 (y),然后使用该屏蔽数组屏蔽第二个数组 (x)。我屏蔽 x 以去除指示设备错误 (-9999) 的值。然后我使用 np.where() 找出 y 在哪里较低(低于平均值 1 个标准偏差)来屏蔽 x 以便在 y 较低时查看 x 的值。
我曾多次尝试更改掩码,但 none 其他 numpy 掩码数组操作给了我不同的结果。我试图写一个逻辑语句来在 mask = FALSE 时给我值,但我不能在 np.where() 语句中这样做。
x = np.array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] )
y = np.array( [ 0, 1, -9999, 3, 4, 5, 6, 7, 8, -9999, 10 ] )
x = np.ma.masked_values( x, -9999 )
y = np.ma.masked_values( y, -9999 )
low_y = ( y.mean() - np.std( y ) )
x_masked = x[ np.where( y < low_y ) ]
当我们调用x_masked时,它returns:
>>>x_masked
masked_array(data=[0, 1, 2, 9],
mask=False,
fill_value=-9999)
我们期望 x_masked 的均值为 0.5 ( (0 + 1)/2 ),但由于包含在 x_masked。
有没有一种方法可以排除屏蔽值以便只获取未屏蔽值?
我想你会想在 y != -9999
的地方屏蔽 x
。如果您对代码进行此更改,它将按预期工作。
您也可以只使用 np.where
来屏蔽。
x = x[np.where(y != -9999)]
y = y[np.where(y != -9999)]
low_y = ( y.mean() - np.std( y ) )
x_masked = x[np.where( y < low_y)]
print (x_masked)
[0 1]
从 1.8 版开始,numpy 添加了 nanstd
and nanmean
来处理丢失的数据。在您的情况下,因为 -9999 在那里指示错误状态,根据定义,我认为这是 numpy.nan
In [76]: y = np.where(y==-9999, np.nan, y)
In [77]: low_y = (np.nanmean(y) - np.nanstd(y))
In [78]: low_y
Out[78]: 1.8177166753143883
In [79]: x_masked = x[ np.where( y < low_y ) ] # [0, 1]