0

特定のサイズのリスト(または配列)からバイトを取り出し、そのバイトの平均を返し、次のバイトに移動して、それをもう一度やり直したいと思います。forループを記述せずにこれを行う方法はありますか?

In [1]: import numpy as np
In [2]: x = range(10)
In [3]: np.average(x[:4])
Out[3]: 1.5
In [4]: np.average(x[4:8])
Out[4]: 5.5
In [5]: np.average(x[8:])
Out[5]: 8.5

[1.5,5.5,8.5]を返すnp.average(x [:bitesize = 4])のようなものを探しています。

配列のスライスと配列のステップスルーを見てきましたが、自分がやりたいことをするようなことは何も見つかりませんでした。

4

3 に答える 3

5
[np.average(x [i:i + 4])for i in xrange(0、len(x)、4)]
于 2010-01-13T02:43:04.257 に答える
1

grouper itertoolsレシピが役立ちます。

于 2010-01-13T02:41:49.350 に答える
1

numpyを使用するnp.averageと、次のaxisキーワードで使用できます。

import numpy as np
x=np.arange(12)
y=x.reshape(3,4)
print(y)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]
print(np.average(y,axis=1))
# [ 1.5  5.5  9.5]

形を変えるには、グループのサイズ(この場合は4)で均等に割り切れる長さから始めxなければならないことに注意してください。x

の長さxがグループサイズで均等に割り切れない場合は、マスクされた配列を作成し、を使用np.ma.averageして適切な平均を計算できます。

例えば、

x=np.ma.arange(12)
y=x.reshape(3,4)
mask=(x>=10)
y.mask=mask
print(y)
# [[0 1 2 3]
#  [4 5 6 7]
#  [8 9 -- --]]
print(np.ma.average(y,axis=1))
# [1.5 5.5 8.5]
于 2010-01-13T03:21:18.190 に答える