2017-02-10 2 views
1

Ich schreibe ein Programm, um eine Likelihood-Funktion zu berechnen. Der Parameter I zu passen versuche ist I. Das ist meine Funktion ist:Python: Plugging in Bereich von Werten für Likelihood-Funktion liefert immer den gleichen Wert

#loglikelihood 
def like_xe(I): 
    model=(0.1535*(Z/A)*((charge*c/v_array)**2))*(np.log((2*m_e*(gamma_array**2)*(v_array**2)*(w_array)/((I*1.6E-6)**2)))-(2*(v_array/c_speed)**2)) 
return np.sum(((-0.5*np.log(2*np.pi*xe_un))-((xe_sp-(model))/(2*xe_un**2)))) 

Die „arrays“ sind alle Datenfelder, 50. Dann werden alle Länge, ich möchte die Likelihood-Funktion für 1000 Werte von I berechnen zwischen 0,0001 und 0,001, und aus diesen Daten wird der Maximalwert der Wahrscheinlichkeitsfunktion extrahiert.

I_list=np.arange(1E-4,0.001,1000) 
like_val=[0 for like in range(len(I_list))] 
for like in range(len(I_list)): 
    like_val[like]=like_xe(I_list[like]) 

Dies gibt nur zurück [-169.58003268336941]. Offensichtlich ist das falsch. Was ist los mit dem, wie ich mich diesem Problem annähere? Ist es möglicherweise, weil es die Rückkehranweisung nur einmal liest?

EDIT: Changed die np.arange zu np.linspace. Dies erzeugt ein Array der richtigen Größe, ist jedoch vollständig mit dem Wert -169.58003268336941 gefüllt.

+0

Wenn Beispielcode veröffentlichen Es könnte einfacher sein, Dinge in Variablen anstatt in eine einzige riesige Linie zu schreiben. – user3591723

Antwort

1

np.arange nimmt Start, Stop und Schritt. Ein Schritt von 1000 zwischen 1e-4 und 0.0001 bedeutet 1 Wert.

>> np.arange(1E-4,0.001,1000) 
array([ 0.0001]) 

ersetzen diese mit np.linspace und Sie sollten eine bessere Iteration erhalten:

>> np.linspace(1E-4,0.001,10) 
array([ 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0007, 
    0.0008, 0.0009, 0.001 ]) 

(auf 10 statt 1000 der Kürze halber)

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html

+0

Dies gibt tatsächlich eine Liste der richtigen Größe zurück! Jedoch ist jeder Wert in dieser Liste genau derselbe: -169.58003268336941, gerade jetzt 1000 mal. – Hannah

+0

Die Quelle dieses Fehlers liegt in Ihrer Funktion like_xe, die ich aufgrund der undefinierten Konstanten nicht debuggen kann. –

Verwandte Themen