4

上記のコードでビン化した一連の数値があります。各ビンの最大数を返すことは可能ですか?

サンプルコードを見てください:

  from numpy import *


  a=array([1,4,5,6,7.8,9,3.4,5.,6,3.5,6,8,9,10])

  bins=arange(0,11,1)

  h=hist(a,bins=bins)

  h=hist(a,bins=bins,weights=a)

これがリターンです

  (array([  0. ,   1. ,   0. ,   6.9,   4. ,  10. ,  18. ,   7.8,   8. ,  28. ]), array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

4 番目のビンで 6.9 の代わりに 3.5 (3 と 4 の間の最大数) を取得できるかどうか疑問に思っていました。

4

2 に答える 2

3

これにより、ビン内の各要素の最大値が得られます。ビンに0要素がない場合は、次のようになります。

print [max(a[(a>=(i))&(a<i+1)]) if a[(a>=(i))&(a<i+1)].size else 0 for i in bins]
[0, 1.0, 0, 3.5, 4.0, 5.0, 6.0, 7.7999999999999998, 8.0, 9.0, 10.0]

+1使いやすいように、ビンのサイズを変更します。

于 2012-05-25T08:45:09.780 に答える
1

numpy.digitizeを使用できます。最初のビンより小さい値には 0 のラベルが付けられることに注意してください。

a[np.digitize(a,bins) == 4].max()

マスクされた配列は、次の場合に役立ちます。

import numpy.ma as ma
a2 = ma.empty((len(bins),len(a)))
a2.data[...] = a
a2.mask = np.digitize(a,bins)-1 != bins[:,np.newaxis]
a2.max(axis=1).filled(np.nan)

array([  nan,   1. ,   nan,   3.5,   4. ,   5. ,   6. ,   7.8,   8. ,
         9. ,  10. ])
于 2012-05-25T08:48:32.860 に答える