我有一个长度为 m=10
的 n=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)