Если у меня есть массивы numpy A
и B
, тогда я могу вычислить след их матричного продукта с помощью:
tr = numpy.linalg.trace(A.dot(B))
Однако матричное умножение A.dot(B)
излишне вычисляет все недиагональные элементы в матричном произведении, когда в трассировке используются только диагональные элементы. Вместо этого я мог бы сделать что-то вроде:
tr = 0.0
for i in range(n):
tr += A[i, :].dot(B[:, i])
но это выполняет цикл в коде Python и не так очевидно, как numpy.linalg.trace
.
Есть ли лучший способ вычислить трассировку матричного произведения массивов numpy? Какой самый быстрый или самый идиоматический способ сделать это?