这是我的第一篇文章,我通常会在档案中找到我所有的答案,但是对此很难,谢谢您的帮助!
我有两个矩阵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循环的问题,我不确定该怎么做
感谢您的帮助。
答案 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]]