theano:两个矩阵之间的行间外积

时间:2015-07-22 20:57:46

标签: numpy theano

我正在尝试计算theano中两个矩阵之间的行方式外积,而不使用扫描。我可以使用einsum在numpy中做到这一点,这在theano中是不可用的。

A = np.array([[1,1,1],[2,2,2]])
B = np.array([[3,3,3,3],[4,4,4,4]])
print np.einsum('xi,xj->xij', A, B)
[[[3 3 3 3]
  [3 3 3 3]
  [3 3 3 3]]

 [[8 8 8 8]
  [8 8 8 8]
  [8 8 8 8]]]

1 个答案:

答案 0 :(得分:6)

使用一些重塑这应该是可行的:许多简单的einsum操作归结为此。复杂的没有。

import theano
import theano.tensor as T
import numpy as np

a = np.array([[1,1,1],[2,2,2]]).astype('float32')
b = np.array([[3,3,3,3],[4,4,4,4]]).astype('float32')

A = T.fmatrix()
B = T.fmatrix()

C = A[:, :, np.newaxis] * B[:, np.newaxis, :]

print C.eval({A:a, B:b})

结果

[[[ 3.  3.  3., 3.]
  [ 3.  3.  3., 3.]
  [ 3.  3.  3.. 3.]]

 [[ 8.  8.  8., 8.]
  [ 8.  8.  8., 8.]
  [ 8.  8.  8., 8.]]]