次のコードを使用して、配列を16個のビンにデジタル化します。
numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])
ビンが16個あるので、出力は[1、16]の範囲にあると思います。ただし、返される配列の値の1つは17です。これはどのように説明できますか?
次のコードを使用して、配列を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()
カバーします。ドキュメントに記載されている条件は、が最初のビンに属し、最後のビンの外側にあることを示しています。そのため、出力には含まれていませんが、17は含まれています。array.min()
array.max()
array.min()
array.max()
0
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、right = True)
array([1、2、3、4、4])