使用theano/numpy.tensordot的外部产品



我有一个长度为 m=10n=3 向量的 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=2处具有 。由于输入数组已经是 3D 形状的,因此我们已经有了version #2。要获得第一个版本,只需沿最后两个暗点交换轴即可。因此,将这两个版本相乘将给我们所需的输出,如下所示 -

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

最新更新