我正在尝试在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
我该怎么办?
答案 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变量,因为它可以直接返回。