Numpyを読んでいるときに、関数 numpy.histogram()
に遭遇しました。
それは何のためで、どのように機能しますか?ドキュメントではbins: 彼らは何ですか?
いくつかのグーグルは、私を ヒストグラム一般の定義 に導きました。わかった。しかし、残念ながら、この知識をドキュメントに記載されている例に関連付けることはできません。
ビンは、X軸に沿ったヒストグラムの単一のバーの幅を表す範囲です。これを間隔と呼ぶこともできます。 (ウィキペディアでは、それらをより正式に「ばらばらのカテゴリ」と定義しています。)
Numpy histogram
関数はヒストグラムを描画しませんが、各ビンに含まれる入力データの発生を計算し、各バーの面積(ビンが同じ幅でない場合は必ずしも高さではない)を決定します。
この例では:
np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
値はそれぞれ0〜1(1を除く)、1〜2(2を除く)、2〜3(3を含む)の3つのビンがあります。この例で区切り文字のリスト([0, 1, 2, 3]
)を指定した場合、Numpyはこれらのビンを定義しますが、何も指定されていない場合は入力から自動的に選択できるため、結果にビンも返されます。たとえば、bins=5
の場合、最小入力値と最大入力値の間の幅が等しい5つのビンを使用します。
入力値は1、2、1です。したがって、ビン「1〜2」には2つのオカレンス(2つの1
値)が含まれ、ビン「2〜3」には1つのオカレンス(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()
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()
numpy.histogram
を使用するもう1つの便利な方法は、出力を折れ線グラフの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()
これは、ヒストグラムを視覚化するのに便利な方法です。ヒストグラムをどこにでもバーなしで、より高いレベルの粒度で表示したい場合に役立ちます。極端なピクセル値を識別するための画像ヒストグラムで非常に役立ちます。