Python tensorflow:将矩阵中的某些行与另一个矩阵中的某些列相乘

Python tensorflow:将矩阵中的某些行与另一个矩阵中的某些列相乘,python,tensorflow,matrix-multiplication,Python,Tensorflow,Matrix Multiplication,假设我有一个矩阵a和一个矩阵B。我知道,matmul(A,B)可以计算两个矩阵的乘法。但是我有一个任务,只需要将a的某些行与B的某些列相乘 例如,我有一个a,Ls_a=[0,1,2]行ID列表,还有一个B,Ls_B=[4,2,6]列ID列表。我想要的结果是一个列表,表示为Ls,例如: Ls[0] = A[0,:] * B[:,4] Ls[1] = A[1,:] * B[:,2] Ls[2] = A[2,:] * B[:,6] 我怎样才能做到这一点 谢谢大家帮助我 您可以按如下方式进行操作: i

假设我有一个矩阵
a
和一个矩阵
B
。我知道,matmul(A,B)可以计算两个矩阵的乘法。但是我有一个任务,只需要将
a
的某些行与
B
的某些列相乘

例如,我有一个
a
Ls_a=[0,1,2]
行ID列表,还有一个
B
Ls_B=[4,2,6]
列ID列表。我想要的结果是一个列表,表示为
Ls
,例如:

Ls[0] = A[0,:] * B[:,4]
Ls[1] = A[1,:] * B[:,2]
Ls[2] = A[2,:] * B[:,6]
我怎样才能做到这一点

谢谢大家帮助我

您可以按如下方式进行操作:

import tensorflow as tf
a=tf.constant([[1,2,3],[4,5,6],[7,8,9]])
b=tf.constant([[1,0,1],[1,0,2],[3,3,-1]])

#taking rows 0,1 from a, and columns 0,2 from b
ind_a=tf.constant([0,1])
ind_b=tf.constant([0,2])

r_a=tf.gather(a,ind_a)

#tf.gather access the rows, so we use it together with tf.transpose to access the columns
r_b=tf.transpose(tf.gather(tf.transpose(b),ind_b))

# the diagonal elements of the multiplication
res=tf.diag_part(tf.matmul(r_a,r_b))
sess=tf.InteractiveSession()
print(r_a.eval())
print(r_b.eval())
print(res.eval())
这张照片

#r_a
[[1 2 3]
 [4 5 6]]

#r_b
[[ 1  1]
 [ 1  2]
 [ 3 -1]]

#result
[12  8]

谢谢。这与我的预期非常接近。唯一的区别是,在您的示例中,我需要a[0]*b[0]和a[1]*b[2]。也就是说,我只需要结果的对角线。但考虑到你的解决方案,我认为很容易实现我的目标。我只需要执行tf.multiply(r_a,tf.transpose(r_b)),然后沿轴1执行reduce_和。是吗?我错过了你只想要对角线的部分。你可以用tf.diag_部分来做这个。查看我的更新解决方案。