全局名称'sqrt'未定义

use*_*890 5 python numpy ipython

我创建了一个函数,potential(x,K,B,N)其中x,K,Bnumpy阵列和N为整数.我正在尝试测试该功能,iPython但我一直在收到错误"global name 'sqrt' not defined".

这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

我尝试过使用from math import *但似乎没有帮助.任何建议将不胜感激!

smc*_*mci 8

from math import sqrt
Run Code Online (Sandbox Code Playgroud)

就是缺少的一切

我尝试过使用from math import *但似乎没有帮助.

(可能你在定义函数后就这样做了.无论如何,fuhgeddaboutit,只需在干净的会话中重新加载代码,它就可以工作.)

更新:严格地说,在Python中你应该import package不会from package import identifier1 [,identifier2, identifier3...],也永远不会 from package import *.但是from package import identifier1在明智地使用时,如果你没有过度使用它,并且在函数内部,则可以.如果它是明确的,并且你会做很多的,它缩短例如在代码sqrt()代替math.sqrt(),log而不是math.log10()