我有两组矩阵Sigma和Sigma_barre(大小:KxDxD),我尝试计算这两组之间的Frobenius距离(矩阵上的2-Norm)矩阵,也就是说,矩阵M(大小KxK),这样
M [i,j] = Sigma [i]和Sigma_barre [j]之间的距离
我使用了np.linalg.norm,但我不是百分百确定它能做到我想要的。这是我天真的代码:
M = np.zeros((K,K))
for i in range(K):
for j in range(K):
M[i,j] = np.linalg.norm(sigma[i]-sigma_barre[j])
所以我的问题是:你知道一种优雅/有效的方法来计算这个矩阵吗?
您可以通过添加一些虚拟尺寸并指定总和应该在哪个轴上完成此操作。
M = np.linalg.norm(sigma[:,None] - sigma_barre[None,:], axis=(2,3))
由于sigma[:,None] - sigma_barre[None,:]
是一个KxKxDxD大小的矩阵,这可能占用大量内存,具体取决于K和D的大小。如果记忆是一个问题,你的解决方案似乎很好,虽然你可以从j
开始循环i+1
,因为你知道M[i,j] == M[j,i]
,和M[i,i] == 0
。