像张量流中的矩阵乘法一样的矩阵减法

时间:2018-12-28 00:46:25

标签: python tensorflow matrix matrix-multiplication

这是我的第一篇文章,我通常会在档案中找到我所有的答案,但是对此很难,谢谢您的帮助!

我有两个矩阵A和B。使用tf.matmult进行矩阵乘法运算很简单。但是我想做矩阵减法,类似于矩阵乘法的工作原理。例如,如果有。

A = tf.constant([[1, 1, 1, 2, 3, 1],[1,2,3,4,5,6],[4,3,2,1,6,5]])
B = tf.constant([[1,3,1],[2,1,1]])

#B*A
X = tf.matmult(B,A)
>>>X = [[8,10,12,15,24,24],[7,7,7,9,17,13]]

我想做的是做类似matmult的操作,但是我要减法和平方而不是乘法。例如...

对于x 11 ,其中下标11是矩阵X的第1行,第1列。

=(-b 11 + a 11 2 +(-b 12 + a 21 2 +(-b 13 + a 31 2

x 12 =(-b 11 + a 12 2 +(-b 12 + a 22 2 +(-b 13 + a 32 2

等类似矩阵乘法的工作原理。

因此,如果我们采用上面的矩阵A和B并执行上述操作(称为matmultsubtract),则会得到

tf.matmultsubtract(B,A)给出:

[[((-1 + 1) 2 +(-3 + 1) 2 +(-1 + 4) 2 , (-1 + 1) 2 +(-3 + 2) 2 +(-1 + 3) 2 ,...],

[(-2 + 1) 2 +(-1 + 1) 2 +(-1 + 4) 2 ,( -2 + 1) 2 +(-1 + 2) 2 +(-1 + 3) 2 ,...]] < / p>

如果通过手动迭代而不是np.matmult来处理numpy数组(您可以使用两个嵌套的for循环),这并不难,但是tensorflow存在for循环的问题,我不确定该怎么做

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

尝试不可以作为矩阵减法的矢量化操作。

# shape=(2,3,6)
B_new = tf.tile(tf.expand_dims(B,axis=-1),multiples=[1,1,A.shape[1]])
# shape=(2,3,6)
A_new = tf.tile(tf.expand_dims(A,axis=0),multiples=[B.shape[0],1,1])
# shape=(2,6)
result = tf.reduce_sum(tf.square(A_new - B_new),axis=1)
with tf.Session() as sess:
    print(sess.run(result))

[[13  5  1  2 33 25]
 [10  6  6  9 42 42]]