微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

矩阵的所有行对之间的矢量化 KL 散度计算

如何解决矩阵的所有行对之间的矢量化 KL 散度计算

我想找出矩阵的所有行对之间的 KL 散度。为了解释,让我们假设有一个形状为 V 的矩阵 N x K。现在我想创建一个维度为 L 的矩阵 N x N,其中每个元素 L[i,j] = KL(V[i,:],V[j,:])。到目前为止,我已经使用以下 scipy.stats.entropy 来计算

upper_triangle = [entropy(V[i,:]) for (i,j) in itertools.combinations(range(N,2)]
lower_triangle = [entropy(V[j,V[i,2)]

L = np.zeroes((N,N))

L[np.triu_indices(N,k = 1)] = upper_triangle
L[np.tril_indices(N,k = -1)] = lower_triangle

有更聪明的方法吗?

解决方法

好的,在对 KL 散度方程稍加调整后,以下方程也应该有效,当然,它的数量级更快,

kl = np.dot(V,np.log(Vc).T)
right = kl + kl.T
left = np.tile(np.diag(kl),(kl.shape[0],1))
left = left + left.T
L = left - right

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。