2013-07-31 192 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等價的。