python - Tensorflow 高效成对内积

标签 python tensorflow inner-product

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

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

最佳答案

使用 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。

关于python - Tensorflow 高效成对内积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47521147/

相关文章:

python - 如何使用Python从网页的检查元素中获取数据

swift - 如何在 google colab 上创建一个 swift notebook

tensorflow - Keras 无法计算 Keras 自定义层中的参数数量

machine-learning - 在进行完全连接计算之前,Caffe 如何隐式对 blob 进行 reshape ?

python - 谷歌应用引擎 jsonpickle

python - Pygame - 实体移动限制 - 碰撞检测

python - 在 Tornado python中设置openId

python - 如何在 TensorFlow 中计算张量的加权和?

python - NumPy 计算向量的范数 2 的平方

Python 矩阵内积