我要计算以下内容:
import numpy as np
n= 3
m = 2
x = np.random.randn(n,m)
#Method 1
y = np.zeros(m)
for i in range(m):
y[i] = x[:,i] @ x[:,i]
#Method 2
y2 = np.diag(x.T @ x)
第一种方法存在一个问题,即它使用for循环,效率可能不高(我需要在GPU上的pytorch中执行此操作数百万次)
当我只需要对角线项时,第二种方法将计算全矩阵乘积,因此也不是非常有效。
我想知道是否存在任何巧妙的方法?
使用手动构造的求和积。您需要各个列的平方和:
由于您只对角线感兴趣,因此可以简化为: