Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 遮罩下的Numpy标准偏差_Python_Numpy - Fatal编程技术网

Python 遮罩下的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,

如何在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, 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)