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)