2 回答

TA贡献1804条经验 获得超2个赞
您可以独立地对第一列和第一行求和,然后取乘积:
res = f[:, 0].sum() * f[0, :].sum()
这里有一些代码来检查这是否符合您的期望:
np.random.seed(0)
f = np.random.random((100, 100))
x = 0
for i in range(100):
for j in range(100):
x += f[i, 0] * f[0,j]
res = f[:, 0].sum() * f[0, :].sum()
assert np.isclose(x, res)

TA贡献1830条经验 获得超9个赞
是的,您可以使用 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,:])
添加回答
举报