2

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

我有一个 100 x 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

我应该怎么办?

4

3 回答 3

3

您是否尝试过这样的事情而不是使用 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() 函数只返回数组中所有元素的总和。您给它的参数只是一个案例,而不是要求和的数组。所以你要返回一个元素的总和:这个元素。

于 2013-06-22T17:13:56.880 回答
1

它看起来像一个向量积,然后是一个沿结果数组的总和。你可以这样做:

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

hi = sigma(A, Network)
于 2013-06-22T15:41:43.707 回答
0

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

于 2013-06-22T15:31:46.720 回答