我想计算沿轴的修剪平均值,而不需要显式循环。所以 应该做同样的事情:
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)
结果:
[-0.01085947 0.99187648 1.98009922]
[ 0.48822938 1.49126719 2.47951973]
答案 0 :(得分:1)
>>> 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])
答案 1 :(得分:1)
使用蒙面数组是这里的方法:
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)
提供与代码相同的输出。