【问题标题】:Froebenius distance matrix of Matrices矩阵的 Frobenius 距离矩阵
【发布时间】:2019-09-04 02:01:52
【问题描述】:

我有两组矩阵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]) 

所以我的问题是:你知道计算这个矩阵的优雅/高效的方法吗?

【问题讨论】:

  • 将两者都重塑为 2D 并使用 cdist : cdist(sigma.reshape(sigma.shape[0],-1),sigma_barre.reshape(sigma_barre.shape[0],-1))

标签: python numpy matrix


【解决方案1】:

您可以通过添加一些虚拟维度并指定应在哪个轴上进行求和来一次性完成此操作。

M = np.linalg.norm(sigma[:,None] - sigma_barre[None,:], axis=(2,3))

由于sigma[:,None] - sigma_barre[None,:] 是一个 KxKxDxD 大小的矩阵,这可能会占用大量内存,具体取决于 K 和 D 的大小。如果内存是个问题,您的解决方案似乎不错,尽管您可以从i+1 开始循环j,因为您知道M[i,j] == M[j,i]M[i,i] == 0

【讨论】: