我有两组矩阵Sigma和Sigma_barre(大小:KxDxD),我尝试计算这两组之间的Frobenius距离(矩阵上为2范数)矩阵,即矩阵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])
所以我的问题是:您知道一种优雅而有效的方法来计算此矩阵吗?
答案 0 :(得分:1)
您可以通过添加一些虚拟尺寸并指定求和的轴来一次性完成此操作。
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
,但是您的解决方案似乎不错。