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 循環(huán)的算法中所做的一切。
例子
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,:])
添加回答
舉報