使用 theano/numpy.tensordot 的外积

Outer products using theano/numpy.tensordot

我有一个 n=3 个长度为 m=10 的向量的 NumPy 数组,所以 input.shape = (n,m,1)。我正在尝试使用 theano/numpy.tensordot 计算每个向量的外积,使得 output.shape = (n,m,m) 和 :

output[i] = np.dot(input[i],input[i].T) = np.outer(input[i],input[i])

我很确定这是可能的,但我很难弄清楚要为轴使用什么参数。这可以很容易地遍历数组,但我正在尝试使用 tensordot 完成此步骤,因为它在 theano 和 numpy 中的实现方式相同。这很重要,因为我正在使用 theano,但目前使用 numpy 进行调试。

您并没有完全使用点积的总和缩减部分,而只是使用其转置版本为每一行广播逐元素乘法。这可以通过在输入数组的两个版本中创建 singleton 维度再次使用 broadcasting 以矢量化方式实现所有行 - 一个在 axis=1 处具有 singleton dim,另一个在 axis=1 axis=2。因为,输入数组已经是 3D 形状的,所以我们已经有了 version #2。要获得第一个版本,只需沿着最后两个暗淡交换轴。因此,将这两个版本相乘将为我们提供所需的输出,就像这样 -

output = input*input.swapaxes(1,2)