3

在 Tensorflow(python)中,给定一个形状为(nxd)的矩阵X,其中每一行都是一个数据点,我想计算这n 个数据点的成对内积,XX'的上三角形。

当然,我可以计算整个XX'并获取它的上三角形,但这意味着我将计算非对角线元素两次。如何通过每对只计算一次内积来在 Tensorflow(python)中有效地计算这些?

4

1 回答 1

0

使用 numpy,您可以执行以下操作:

import numpy as np

A = np.random.randn(5, 3)
inds = np.triu_indices(5) # upper triangle indices

# expensive way to do it
ipu1 = np.dot(A, A.T)[inds]


# possibly less expensive way to do it.
ipu2 = np.einsum('ij,ij->i', A[inds[0]], A[inds[1]])

print(np.allclose(ipu1, ipu2))

这将输出 True。Tensorflow 没有内置 triu_indices 函数,但如果需要,通过查看 numpy 代码编写一个并不难。它确实有einsum。

于 2018-01-02T23:11:00.333 回答