Python 有没有一种方法可以忽略用于屏蔽单独数组的数组中的屏蔽值?
我的数据是若干相同长度的数据数组。我屏蔽了一个数组(y),然后使用该屏蔽数组屏蔽第二个数组(x)。I屏蔽x以去除指示设备错误的值(-9999)。然后我使用np.where()找出y低的位置(低于平均值1个标准偏差)来屏蔽x,以便在y低时看到x的值 我尝试过多次更改掩码,但其他numpy掩码数组操作都没有给出不同的结果。当mask=FALSE时,我试图编写一条逻辑语句来给出值,但在np.where()语句中我无法这样做Python 有没有一种方法可以忽略用于屏蔽单独数组的数组中的屏蔽值?,python,arrays,numpy,matplotlib,masked-array,Python,Arrays,Numpy,Matplotlib,Masked Array,我的数据是若干相同长度的数据数组。我屏蔽了一个数组(y),然后使用该屏蔽数组屏蔽第二个数组(x)。I屏蔽x以去除指示设备错误的值(-9999)。然后我使用np.where()找出y低的位置(低于平均值1个标准偏差)来屏蔽x,以便在y低时看到x的值 我尝试过多次更改掩码,但其他numpy掩码数组操作都没有给出不同的结果。当mask=FALSE时,我试图编写一条逻辑语句来给出值,但在np.where()语句中我无法这样做 x = np.array([ 0, 1, 2, 3, 4, 5, 6, 7,
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_掩蔽的平均值为0.5((0+1)/2),但由于x_掩蔽中包含的掩蔽-9999值(2和9),因此平均值为3
有没有办法排除屏蔽值,以便只获取未屏蔽值?我想您应该屏蔽
x
其中y!=-9999
。如果您对代码进行此更改,它将按您的预期工作
您也可以使用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)]
我想你会想掩盖
x
wherey!=-9999
。如果您对代码进行此更改,它将按您的预期工作
您也可以使用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)]
自版本1.8以来,numpy添加了和以处理丢失的数据。在您的例子中,因为-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]
[76]中的y=np.where(y==-9999,np.nan,y)
[77]中:low_y=(np.nanmean(y)-np.nanstd(y))
In[78]:低值
Out[78]:1.8177166753143883
在[79]:x_masked=x[np.其中(y
自1.8版numpy添加并处理缺失数据以来。在您的例子中,因为-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]
[76]中的y=np.where(y==-9999,np.nan,y)
[77]中:low_y=(np.nanmean(y)-np.nanstd(y))
In[78]:低值
Out[78]:1.8177166753143883
在[79]:x_masked=x[np.其中(y
当我这样做时,得到的结果与初始代码相同。这就是我在运行代码时得到的结果:掩码数组(数据=[0,1,2,9]我很惊讶您的结果是[0,1,2,9]
。尝试x=np.ma.masked_值(y,-9999)
在代码中,您应该得到掩码数组(数据=[0,1,--,-,-]…
x=np.ma.masked_值(y,-9999)
worked!有没有办法让ma.masked_值屏蔽掉其他屏蔽值?如果我写:x=np.ma.masked_值(y,--),它会工作吗
或类似的东西?如果我正确理解了您的问题,您不希望--
显示在您的数组中吗?如果是这样,您只需使用np来遵循上面的代码。其中
当我这样做时,我会得到与初始代码相同的结果。这是我运行您的代码时得到的结果:masked_数组(data=[0,1,2,9]我很惊讶你的结果是[0,1,2,9]
。试试x=np.ma.masked_值(y,-9999)
在你的代码中,你应该得到masked_数组(data=[0,1,--,--]…
x=np.ma.masked_值(y,-9999)
worked!有没有办法让ma.masked_值屏蔽掉其他屏蔽值?如果我写:x=np.ma.masked_值(y,--),它会工作吗
或类似的东西?如果我正确理解了您的问题,您不希望--
显示在您的数组中?如果是这样,您只需使用np来遵循我上面的代码即可。其中
起作用。因此,现在如果我想找到应用于它的任何值的平均值np.nan,我需要使用np.nanmean(),对吗?这很有效。所以现在如果我想找到应用于它的任何值的平均值np.nan,我需要使用np.nanmean(),对吗?