Обратите внимание, что сумма в k
в вашем выражении влияет только на первый фактор, а сумма в l
включает только второй:
sum_{k=1,...,n} sum_{l=1,...,n} A[i, k] * A[j, l] =
(sum_{k=1,...,n} A[i, k]) * (sum_{l=1,...,n} A[j, l])
Выражения в скобках, за исключением названий индексов, одинаковы, поэтому определите
sA = np.sum(A, axis=1)
Тогда ваш B
- это так называемое внешнее произведение из sA
с самим собой:
B = np.outer(sA, sA)