Numpy.histogram () nasıl çalışır?


Yanıtlar:


167

Bölme, X ekseni boyunca tek bir histogram çubuğunun genişliğini temsil eden aralıktır. Buna aralık da diyebilirsiniz. (Wikipedia bunları daha resmi olarak "ayrık kategoriler" olarak tanımlar.)

Numpy histogramişlevi histogramı çizmez , ancak her bir bölmeye düşen girdi verilerinin oluşumlarını hesaplar ve bu da sırayla her çubuğun alanını (bölmeler eşit genişlikte değilse yüksekliği değil) belirler.

Bu örnekte:

 np.histogram([1, 2, 1], bins=[0, 1, 2, 3])

Sırasıyla 0 ila 1 (1 hariç), 1 ila 2 (2 hariç) ve 2 ila 3 (3 dahil) arasında değişen değerler için 3 bölme vardır. Numpy'nin [0, 1, 2, 3]bu örnekte bir sınırlayıcılar listesi ( ) vererek bu bölmeleri tanımlama yolu , ancak sonuçlarda bölmeleri de döndürür, çünkü hiçbiri belirtilmezse bunları girdiden otomatik olarak seçebilir. Eğer bins=5örneğin, en az bir giriş değeri ve maksimum giriş değeri arasındaki eşit genişlik yayılmasının 5 depo kullanır.

Giriş değerleri 1, 2 ve 1'dir. Bu nedenle, "1 - 2" bölmesi iki oluşum (iki 1değer) içerir ve "2 ila 3" bölmesi bir oluşum ( 2) içerir. Bu sonuçlar iade başlığın ilk öğeye içindedir: array([0, 2, 1]).

Buradaki bölmeler eşit genişlikte olduğundan, her çubuğun yüksekliği için oluşum sayısını kullanabilirsiniz. Çizildiğinde, sahip olacaksınız:

  • X ekseninde aralık / bölme [0,1] için 0 yüksekliğinde bir çubuk,
  • aralık / bölme [1,2] için yüksekliği 2 olan bir çubuk,
  • aralık / bölme [2,3] için yüksekliği 1 olan bir çubuk.

Bunu doğrudan Matplotlib ile çizebilirsiniz ( histişlevi ayrıca kutuları ve değerleri döndürür):

>>> 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()

görüntü açıklamasını buraya girin


8
Bunları çizmek istiyorsanız , bu cevap da ilginizi çekebilir . Matplotlib ayrıca bunları doğrudan hesaplayabilir . Burada ve burada örneklere bakın .
Bruno

İris çiçekleri veri setinde, sayımlar, bin_edges = np.histogram (iris_setosa ['petal_length'], bins = 10, yoğunluk = True), verdiğiniz örneğe göre sayımlarımı kayan değerlerde verir, nasıl sayılabilir kayan değer?
Dipen Gajjar

En iyi yanıt, en büyük sağ kenarın üzerindeki önemli sayıda değerin göz ardı edileceğini hesaba katmalıdır. Her zaman ızgaraların kenarının üzerindeki değerleri son bölmeye ekleyin veya manuel olarak oluşturulan son binsdeğeri dizideki maksimum değere değiştirin .
A.Ametov

@DipenGajjar "Yoğunluk = Doğru" seçeneğini atlarsanız, bunu görmezsiniz. Yoğunluk anahtar sözcüğü, size olasılık yoğunluk işlevinin temsil edildiği "normalleştirilmiş" bir histogram verir. Buradan okuyabilirsiniz .
BUFU

67
import numpy as np    
hist, bin_edges = np.histogram([1, 1, 2, 2, 2, 2, 3], bins = range(5))

Aşağıda, histbölme # 0'da, bölme # 1'de, bölme # 3'te, bölme # 4'te, bölme # 4'te 0 öğe olduğunu gösterir.

print(hist)
# array([0, 2, 4, 1])   

bin_edges bölme # 0'ın [0,1) aralığı, bölme # 1'in [1,2), ..., bölme # 3'ün [3,4) olduğunu belirtir.

print (bin_edges)
# array([0, 1, 2, 3, 4]))  

Yukarıdaki kodla oynayın, girişi olarak değiştirin np.histogramve nasıl çalıştığını görün.


Ama bir resim bin kelimeye bedeldir:

import matplotlib.pyplot as plt
plt.bar(bin_edges[:-1], hist, width = 1)
plt.xlim(min(bin_edges), max(bin_edges))
plt.show()   

görüntü açıklamasını buraya girin


4
Bunun daha doğru olacağını düşünüyorum: plt.bar(bin_edges[:-1], hist, width=1)ve plt.xlim(min(bin_edges), max(bin_edges))çubukları beklenen genişliklerine uydurmak için (aksi takdirde, aralarında değer olmayan daha küçük bir bölme olabilir).
Bruno

Yukarıdaki numpy formatında elde edilen "hist" i "plt.hist (...)" fonksiyonunda kullanmak mümkün müdür? Çünkü bar yönteminde, onu bir "y" olarak sağlıyorsunuz, burada
geçmişte

7

Başka bir yararlı şey numpy.histogramde çıktıyı bir çizgi grafiğindeki x ve y koordinatları olarak çizmektir. Örneğin:

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()

görüntü açıklamasını buraya girin

Bu, her yerde çubuklar olmadan daha yüksek bir ayrıntı düzeyi istediğiniz histogramları görselleştirmek için kullanışlı bir yol olabilir. Ekstrem piksel değerlerini tanımlamak için görüntü histogramlarında çok kullanışlıdır.


Bu, görüntü satırı ve sütun projeksiyonlarını görmek için oldukça kullanışlıdır.
SKR
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.