Nalezení optimální šířky binu histogramu
In [14]:
import numpy as np
import matplotlib.pyplot as plt
načtení dat
In [15]:
data=np.loadtxt('data.dat') #nacteni dat ze souboru data.dat
výpočet ztrátové funkce
In [16]:
Ndata=np.size(data)
C=np.empty(Ndata)
delta=np.empty(Ndata)
for i in range(1,Ndata):
hist,bin_edges=np.histogram(data,bins=i) #vytvoreni histogramu
mean=np.mean(hist)
sigma=np.std(hist)
delta[i]=bin_edges[1]-bin_edges[0]
C[i]=(2*mean-sigma**2)/delta[i]**2
Výpis výsledků
In [17]:
Cmin=np.min(C)
imin=np.where(C==Cmin)[0]
print('pocet dat:',np.size(data))
print('optimalni pocet binu: {0:d}'.format(imin[0]))
print('optimalni sirka binu: {0:f}'.format(delta[imin[0]]))
pocet dat: 1000 optimalni pocet binu: 27 optimalni sirka binu: 0.970145
Nakreslení ztrátové funkce
In [18]:
fig,ax=plt.subplots()
ax.scatter(delta[1:Ndata],C[1:Ndata]) #nakresleni histogramu
ax.plot([delta[imin[0]],delta[imin[0]]],[np.min(C),np.max(C)],c='red',ls='dashed' )
plt.xscale('log')
ax.set_xlabel('$\Delta$')
ax.set_ylabel('$C\, (\Delta)$')
plt.show()
Nakreslení histogramu s optimální šířkou binu
In [19]:
fig,ax=plt.subplots(figsize=(4,4))
ax.hist(data,bins=imin[0],fc='orange',ec='black')
ax.set_xlabel('biny')
ax.set_ylabel('četnosti')
plt.show()