numpy.digitize範囲外の値を返しますか?
-
08-10-2019 - |
質問
次のコードを使用して、配列を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)
必要に応じて返されます。
だからあなたの場合、 0
と 17
また、有効な返品値でもあります(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])