我有这样的代码:
x = 0
for i in range(100):
for j in range(100):
x += f[i, 0] * f[0, j]
这里f
是2D数组。现在,在numpy中有可用的函数可用于执行此操作而无需使用for循环吗?
答案 0 :(得分:2)
您可以将第一列和第一行分别求和,然后乘积:
web-sys
这里有一些代码可以检查您所期望的内容:
res = f[:, 0].sum() * f[0, :].sum()
答案 1 :(得分:1)
是的,您可以使用NumPy的outer()
。这基本上是一个外部乘积问题,您只需将所得外部乘积n * n矩阵的元素求和即可。在这里,矩阵中使用的唯一值是第一行和第一列。
因此,您要做的就是使用np.outer
(docs)来获取第一行和第一列的外部乘积。这就是您使用嵌套的for循环在算法中所做的所有事情。
示例
import numpy as np
f = np.random.randint(1, 9, (3, 3)) # Create a test 3x3 matrix
col = f[:, 0] # first column enteries [5, 3, 8]
row = f[0, :] # first row enteries [5, 3, 4]
summ = np.sum(np.outer(row, col))
print (f)
print ('The sum is %d' %summ)
#[[5 3 4]
# [3 8 1]
# [8 7 2]]
# The sum is 192
hpaulj建议的替代是
np.einsum('i,j->', f[:,0], f[0,:])