numpyを読んでいるときに、関数に遭遇しましたnumpy.histogram()
。
それは何のために、どのように機能しますか?ドキュメントでは、ビンについて言及しています:それらは何ですか?
一部のグーグルによって、ヒストグラムの定義が一般的になりました。わかった。しかし、残念ながら、この知識をドキュメントに記載されている例に関連付けることはできません。
numpyを読んでいるときに、関数に遭遇しましたnumpy.histogram()
。
それは何のために、どのように機能しますか?ドキュメントでは、ビンについて言及しています:それらは何ですか?
一部のグーグルによって、ヒストグラムの定義が一般的になりました。わかった。しかし、残念ながら、この知識をドキュメントに記載されている例に関連付けることはできません。
回答:
ビンは、X軸に沿ったヒストグラムの1本の棒の幅を表す範囲です。これを間隔と呼ぶこともできます。(ウィキペディアでは、それらをより正式には「互いに素なカテゴリー」と定義しています。)
Numpy histogram
関数はヒストグラムを描画しませんが、各ビンに含まれる入力データの発生を計算します。これにより、各バーの領域(ビンが同じ幅でない場合は必ずしも高さではない)が決定されます。
この例では:
np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
3つのビンがあり、それぞれ0から1(除外1)、1から2(除外2)、および2から3(除外3)の範囲の値です。Numpyがこれらのビンを定義する方法は[0, 1, 2, 3]
、この例で区切り文字()のリストを指定する場合ですが、何も指定されていない場合は入力からビンを自動的に選択できるため、結果にもビンが返されます。たとえばの場合bins=5
、最小入力値と最大入力値の間の幅が等しい5つのビンを使用します。
入力値は1、2、1です。したがって、ビン "1 to 2"には2つのオカレンス(2つの1
値)が含まれ、ビン "2 to 3"には1つのオカレンス(the 2
)が含まれます。これらの結果は、返されるタプルの最初の項目にありますarray([0, 2, 1])
。
ここでのビンは同じ幅であるため、各バーの高さに出現数を使用できます。描かれると、次のようになります。
これをMatplotlibで直接プロットできます(このhist
関数はビンと値も返します)。
>>> import matplotlib.pyplot as plt
>>> plt.hist([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]), <a list of 3 Patch objects>)
>>> plt.show()
bins
値を配列の最大値に変更します。
import numpy as np
hist, bin_edges = np.histogram([1, 1, 2, 2, 2, 2, 3], bins = range(5))
以下は、hist
ビン#0に0個、ビン#1に2個、ビン#3に4個、ビン#4に1個のアイテムがあることを示しています。
print(hist)
# array([0, 2, 4, 1])
bin_edges
ビン#0が間隔[0,1)、ビン#1が[1,2)、...、ビン#3が[3,4)であることを示します。
print (bin_edges)
# array([0, 1, 2, 3, 4]))
上記のコードで遊んで、入力をに変更して、np.histogram
どのように機能するかを確認してください。
しかし、絵は千の言葉に値します:
import matplotlib.pyplot as plt
plt.bar(bin_edges[:-1], hist, width = 1)
plt.xlim(min(bin_edges), max(bin_edges))
plt.show()
plt.bar(bin_edges[:-1], hist, width=1)
そしてplt.xlim(min(bin_edges), max(bin_edges))
、バーを期待される幅に合わせるには(そうでなければ、値のない小さなビンがあるだけかもしれません)。
もう1つの便利なことnumpy.histogram
は、出力を線グラフのx座標とy座標としてプロットすることです。例えば:
arr = np.random.randint(1, 51, 500)
y, x = np.histogram(arr, bins=np.arange(51))
fig, ax = plt.subplots()
ax.plot(x[:-1], y)
fig.show()
これは、どこにも棒なしでより高いレベルの粒度が必要な場合にヒストグラムを視覚化するのに便利な方法です。極端なピクセル値を識別するための画像ヒストグラムで非常に役立ちます。