1. ホーム
  2. python

[解決済み] numpy.histogram()はどのように動作するのですか?

2022-06-09 10:29:06

質問

numpyについて調べているうちに、次のような関数に出会いました。 numpy.histogram() .

何のためのものであり どのように機能するのですか? ドキュメントの中で彼らは ビン : それは何ですか?

いくつかググってみると 一般的なヒストグラムの定義 . 私はそれを得る。しかし、残念ながら、私はこの知識をドキュメントで与えられた例とリンクさせることができません。

どのように解決するのですか?

ビンは、X軸に沿ったヒストグラムの1本の棒の幅を表す範囲です。これを区間と呼ぶこともできます。(Wikipedia では、より正式には "不連続なカテゴリ" として定義されています)。

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なので、bin "1〜2"には2つのオカレンス(2つの 1 値) が含まれ、bin "2 to 3" には 1 つの出現回数 ( 2 ). これらの結果は、返されたタプルの最初の項目にある。 array([0, 2, 1]) .

ここでのビンは幅が同じなので、各バーの高さは出現回数を使うことができます。描画すると、次のようになります。

  • X 軸の範囲/ビン [0,1] に対して高さ 0 のバー。
  • 範囲/ビン [1,2]の高さ 2 のバー。
  • 範囲/ビン [2,3] のための高さ 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()

<イグ