Python 遮罩下的Numpy标准偏差
如何在numpy阵列中沿特定轴获取遮罩下的标准偏差Python 遮罩下的Numpy标准偏差,python,numpy,Python,Numpy,如何在numpy阵列中沿特定轴获取遮罩下的标准偏差 data = array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24]]) M = array([[0, 1, 0, 0, 0], [1,
data = array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
M = array([[0, 1, 0, 0, 0],
[1, 1, 1, 1, 1],
[1, 1, 0, 1, 1],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]])
结果数组应为:
masked_std = std( data, axis=0, mask=M )
[ std([5,10]), std([1,6,11]), std([7,17]), std([8,13], std([9,14]) ]
使用遮罩:
使用遮罩:
您可以使用numpy:
您可以使用numpy:
import numpy as np
np.ma.MaskedArray(data, 1-M).std(axis=0)
In [19]: from numpy import ma
In [20]: data
Out[20]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
In [21]: M
Out[21]:
array([[0, 1, 0, 0, 0],
[1, 1, 1, 1, 1],
[1, 1, 0, 1, 1],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]])
In [22]: mdata = ma.masked_array(data, mask=~M.astype(bool))
In [23]: mdata
Out[23]:
masked_array(data =
[[-- 1 -- -- --]
[5 6 7 8 9]
[10 11 -- 13 14]
[-- -- 17 -- --]
[-- -- -- -- --]],
mask =
[[ True False True True True]
[False False False False False]
[False False True False False]
[ True True False True True]
[ True True True True True]],
fill_value = 999999)
In [24]: mdata.std(axis=0)
Out[24]:
masked_array(data = [2.5 4.08248290464 5.0 2.5 2.5],
mask = [False False False False False],
fill_value = 999999)