Python中的Sigma表示法

时间:2013-06-22 15:24:46

标签: python matrix numpy sum

我正在尝试在python中创建一个sigma。

我有一个100乘100矩阵(用numpy创建),我有一个100个值的列表。 我的矩阵是变量A,我的列表是变量Network。

总和应该是这样的。

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

矩阵中的i和j表示特定值,网络中的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

我该怎么办?

3 个答案:

答案 0 :(得分: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()函数只返回数组中所有元素的总和。你给它的参数只是一个案例而不是要求和的数组。所以你要返回一个元素的总和:这个元素。

答案 1 :(得分:1)

它看起来像一个矢量积,后跟生成的数组之和。你可以这样做:

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

hi = sigma(A, Network)

答案 2 :(得分:0)

看起来你想要一个点积。我认为您不需要将两个索引传递给您的函数。此外,您没有循环使用原始代码,因此没有理由将hi初始化为零或使用+=。最后,您需要返回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变量,因为它可以直接返回。