2013-07-31 292 views
2

我在PYTHON中编写了一个函数,如下所示,但是我发现SUM在其中无法正常工作。SUM不起作用

def func(a,*b): 
    c = np.array([1,a,a**2,a**3]) 
    d = np.array(b) 
    return sum(c*d) 


a = 10 
b = [0.1,0.2,0.3,0.4] 

aa = np.array([1,a,a**2,a**3]) 
bb = np.array(b) 
c = func(a,b) 

print sum(aa*bb),c 

该代码的输出是432.1 [ 1.00000000e-01 2.00000000e+00 3.00000000e+01 4.00000000e+02]

有没有人知道SUM发生了什么事?

+1

我不完全确定你期望的输出是什么? – njzk2

+0

@ njzk2 432.1对我来说比较适合。 – YOng

回答

4

您的func函数签名捕获b作为使用*作为全部标记的参数列表。这使得b列表中有一个参数。但要定义bb你不这样做;你通过只是的名单。

要么是:

bb = np.array([b]) 

或做:

def func(a, b): 
    c = np.array([1,a,a**2,a**3]) 
    d = np.array(b) 
    return sum(c*d) 

def func(a, *b): 
    c = np.array([1,a,a**2,a**3]) 
    d = np.array(b[0]) 
    return sum(c*d) 

使这两个codepaths等价的。