質問

次のコードを使用して、配列を16個のビンにデジタル化しています。

numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])

16個のビンがあるため、出力は範囲[1、16]にあると思います。ただし、返された配列の値の1つは17です。これをどのように説明できますか?

役に立ちましたか?

解決

これは実際に文書化された動作です numpy.digitize():

各インデックス i 返されたのはそのようなことです bins[i-1] <= x < bins[i] もしも bins 単調に増加しています bins[i-1] > x >= bins[i] もしも bins 単調に減少しています。値の場合 x の範囲を超えています bins, 0 また len(bins) 必要に応じて返されます。

だからあなたの場合、 017 また、有効な返品値でもあります(BINアレイがによって返されることに注意してください numpy.histogram() 長さがあります 17)。によって返されたビン numpy.histogram() 範囲をカバーします array.min()array.max(). 。ドキュメントで与えられた条件はそれを示しています array.min() 最初のビンに属します array.max() 最後のビンの外にあります - それが理由です 0 17は出力ではありません。

他のヒント

numpy.histogram() ビンの配列を生成します エッジ, 、そこにあります (number of bins)+1.

Numpyバージョン1.8。では、間隔を閉じているか開いているかを検討するようにnumpy.digitizeを選択するかどうかを選択するオプションがあります。以下は例です(からコピーされます http://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html)

x = np.array([1.2、10.0、12.4、15.5、20。])

bins = np.array([0,5,10,15,20])

np.digitize(x、bins、右= true)

配列([1、2、3、4、4])

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top