Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.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 沿轴计算修剪平均值_Python_Numpy_Scipy - Fatal编程技术网

Python 沿轴计算修剪平均值

Python 沿轴计算修剪平均值,python,numpy,scipy,Python,Numpy,Scipy,我想计算沿轴的修剪平均值,不需要显式循环。所以 应执行以下操作: arr=np.random.randn(3,10000) arr[:,:5]+=999 arr=np.arange(3)[:,None]+arr out=np.zeros(arr.shape[0]) for i in range(arr.shape[0]): col=arr[i,:] m=np.abs(col-col.mean())<2*col.std() out[i]=col[m].mean()

我想计算沿轴的修剪平均值,不需要显式循环。所以 应执行以下操作:

arr=np.random.randn(3,10000)
arr[:,:5]+=999
arr=np.arange(3)[:,None]+arr
out=np.zeros(arr.shape[0])

for i in range(arr.shape[0]):
   col=arr[i,:]
   m=np.abs(col-col.mean())<2*col.std()    
   out[i]=col[m].mean()

print out
print arr.mean(1)
>>将numpy作为np导入
>>>将numpy.ma导入为ma
>>>a=np.arange(24)。重塑((6,4))
>>>掩码=~(np.abs(a-a.mean(axis=1)[:np.newaxis])>>面具
数组([[True,False,False,True],
[真,假,假,真],
[真,假,假,真],
[真,假,假,真],
[真,假,假,真],
[True,False,False,True]],dtype=bool)
>>>ma.数组(a,掩码=掩码).平均值(轴=1).数据
数组([1.5,5.5,9.5,13.5,17.5,21.5])

使用屏蔽阵列是一种方法:

import numpy.ma as ma
arr = np.transpose(arr)
mask = np.abs(arr - arr.mean(0)) >= 2 * arr.std(0)
print ma.array(arr,mask=mask).mean(0)

提供与代码相同的输出。

我认为您的示例中有一些打字错误。您不希望在第4行中使用
?我认为你应该测试你的函数,并发布预期的输入和输出。用户:你应该在正确的地方。增加了一个例子。
>>> import numpy as np
>>> import numpy.ma as ma
>>> a = np.arange(24).reshape((6,4))
>>> mask=~(np.abs(a - a.mean(axis=1)[:,np.newaxis]) < a.std(axis=1)[:,np.newaxis])
>>> mask
array([[ True, False, False,  True],
       [ True, False, False,  True],
       [ True, False, False,  True],
       [ True, False, False,  True],
       [ True, False, False,  True],
       [ True, False, False,  True]], dtype=bool)
>>> ma.array(a,mask=mask).mean(axis=1).data
array([  1.5,   5.5,   9.5,  13.5,  17.5,  21.5])
import numpy.ma as ma
arr = np.transpose(arr)
mask = np.abs(arr - arr.mean(0)) >= 2 * arr.std(0)
print ma.array(arr,mask=mask).mean(0)