global name 'sqrt' nicht definiert
Ich habe eine Funktion, die potential(x,K,B,N)
, wo x
,K
,B
sind numpy
arrays und N
ist eine ganze Zahl. Ich versuche zu testen, die Funktion in iPython
aber ich erhalte die Fehlermeldung "global name 'sqrt' not defined"
.
Hier ist ein Blick auf meinen code:
def potential(x,K,B,N):
x = x.reshape((3,N),order='F')
U_b = 0.0
for i in xrange(0,N-1):
for j in xrange(i+1,N):
if K[i,j] == 1.0:
U_b += sum((x[:,i]-x[:,j])**2)
U_b = 0.5*U_b
U_a = 0.0
for i in xrange(0,N-2):
for j in xrange(i+1,N-1):
for l in xrange(j+1,N):
if B[i,j,l] == 1.0:
U_a += B[i,j,l]*sum((x[:,i]-x[:,j])*(x[:,j]-x[:,l]))/(sqrt(sum((x[:,i]-x[:,j])**2))*sqrt(sum((x[:,j]-x[:,l])**2)))
U_a = -U_a
U_r = 0.0
d = 0.0
for i in xrange(0,N-1):
for j in xrange(i+1,N):
d = sqrt(sum((x[:,i]-x[:,j])**2))
if d > sqrt(0.2):
U_r += (1.0/6.0)*(1/(d**6))
else:
U_r += -0.2**(-7.0/2.0)*d + (7.0/6.0)*(0.2)**(-3)
return U_b + U_a + U_r
Ich habe versucht, mit from math import *
aber das scheint nicht zu helfen. Irgendwelche Vorschläge würde sehr geschätzt werden!
InformationsquelleAutor user3758890 | 2014-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
ist alles, was noch fehlt
(Möglicherweise hast du nach der Definition der Funktion. Trotzdem, fuhgeddaboutit, einfach die reload-code in einem sauberen Sitzung, es wird funktionieren.)
UPDATE: streng, in Python geben, die Sie eigentlich tun sollten
import package
nichtfrom package import identifier1 [,identifier2, identifier3...]
und niefrom package import *
. Aberfrom package import identifier1
ist ok, wenn umsichtig verwendet, wenn Sie übertreiben Sie es nicht, und lokal innerhalb einer Funktion. Wenn es eindeutig ist, und du gehst zu tun eine Menge, es verkürzt den code z.B.sqrt()
stattmath.sqrt()
,log
stattmath.log10()
sqrt ist nicht ein builtin in Python, im Gegensatz zu R. So ja in Python benötigen Sie entweder
import math
oderfrom math import sqrt
InformationsquelleAutor smci
Da Sie tagged numpy,
Dann verwenden
np.sqrt
stattsqrt
. Funktioniert immer.InformationsquelleAutor Adarsh Chavakula
einfach hinzufügen.
InformationsquelleAutor sundar nataraj
Haben Sie ein paar Optionen hier:
Zusätzliche Bibliotheken: z.B.
NumPy
und verwenden Sie dann
np.sqrt(9)
oder
Oder Standard-Bibliothek und integrierte Lösungen:
1)
9**0.5
2)
oder
Für den letzten Teil, ich würde lieber die
math
Funktion aus performance-Gründen. Ich habe diesen benchmark hier:Warum ist das Mathe-Modul effizienter?
Das math-Modul verwendet die C-Implementierung der square root -
Den code für mein benchmark finden Sie hier:
http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day8_sqrt_and_exp.ipynb?create=1
InformationsquelleAutor