0

明示的なループなしで、軸に沿ってトリム平均を計算したい。したがって、次のように同じことを行う必要があります。

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]
4

2 に答える 2

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])
于 2012-05-11T17:10:37.363 に答える
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)

コードと同じ出力が得られます。

于 2012-05-11T18:29:22.863 に答える