2013-06-22 31 views
2

我想在python中創建一個西格瑪和。Python中的西格瑪符號

我有一個100×100矩陣(用numpy創建),我有一個100個值的列表。 我的矩陣是變量A,而我的列表是變量Network。

總和應該看起來像這樣。

hi= Sigma((A[i][j])* Network[j]) 

i和j在矩陣中是指特定的值,而在Network中的j是指列表中的值。

所以,如果我想H67,總和將是:

(A[67][67]*Network[67]) + (A[67][66]*Network[66]) + (A[67][65*Network[65]) + ... 
(A[67][0]*Network[0]). 

我的代碼如下,但我不認爲這是正確的。

def new_sum(i,j): 
    hi=0 
    hi+= numpy.sum((A[i][j]*Network[j])) 
    return hi 

我該怎麼辦?

回答

0

看起來像你想要一個點產品。我不認爲你需要將兩個索引傳遞給你的函數。此外,你並沒有循環使用原始代碼,所以沒有理由將初始化爲零或使用+=。最後,您需要返回hi,而不是sum

def new_sum(i): 
    hi = numpy.sum(numpy.dot(A[i][:i], Network[:i])) 
    return hi 

編輯

更多更好的編程技巧:最好是在一個函數不使用全局變量,但是通過你需要給函數的變量,就像這樣:

def new_sum(matrix, vector, i): 
    return numpy.sum(numpy.dot(matrix[i][:i], vector[:i])) 

# Now I can call this with ANY variables 
hi = new_sum(A, Network, 67) 

請注意,在函數中,也不必保存hi變量,因爲它可以直接返回。

+0

謝謝。我也會試一試,看看它是否有效。 – user2509830

1

它看起來像是一個向量乘積,然後是結果數組中的和。你可以這樣做:

sigma = lambda x, y: np.sum(np.dot(x,y)) 

hi = sigma(A, Network) 
2

你試過類似這樣的事情而不是使用Numpy.sum()函數嗎?

def new_sum(i,j): 
    hi=0 
    for n in range(j+1): 
     hi+= A[i][n]*Network[n] 
    return hi 

numpy sum()函數只返回數組中所有元素的總和。你給它的參數只是一個例子而不是數組。所以你要返回一個元素的總和:這個元素。