我有一个NumPy数组,长度为m=10的n=3向量,所以是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进行调试。
发布于 2016-02-09 17:30:53
您并不是在使用点积的和缩减部分,而只是对每一行进行元素级的乘法,并使用它的转置版本。这可以通过在两个版本的输入数组中创建broadcasting维度(一个在axis=1上使用singleton dim,另一个在axis=2上),以向量化的方式实现。因为输入数组已经是三维的,所以我们已经有了version #2。要获得第一个版本,只需在最后两个dim之间交换轴。因此,将这两个版本相乘将给我们所需的输出,如下所示-
output = input*input.swapaxes(1,2)https://stackoverflow.com/questions/35297798
复制相似问题