我有一个矩阵
A = [[ 1. 2. 3.]
[ 4. 5. 6.]]
和矢量
b = [ 5. 10. 15.]
我想将A(A[:,i]
)的每一列添加到b[i]
,即
[[ 6. 12. 18.]
[ 9. 15. 21.]]
一个简单的方法就是
A = tf.constant([[1., 2, 3],[1, 2, 3]])
b = tf.constant([[5, 10, 15.]])
e = tf.ones((2,1))
a + tf.matmul( e, b ) # outer product "repmat"
但这样做似乎非常浪费,必须构建一个我们最终会抛出的整个辅助矩阵。如果不编写自己的操作,是否有一种更为自觉的方式?
答案 0 :(得分:1)
如前所述,您可以A + b
:
import tensorflow as tf
tf.InteractiveSession()
A = tf.constant([[1., 2, 3], [4, 5, 6]])
b = tf.constant([[5, 10, 15.]])
(A + b).eval()
返回:
array([[ 6., 12., 18.],
[ 9., 15., 21.]], dtype=float32)
这可行的原因是阵列广播。 Numpy broadcasting page有很好的信息和张量流广播的工作方式相同。基本上对于每个维度(从尾随维度移动到前导维度),tensorflow / numpy尝试检查维度是否兼容(要么它们具有相同数量的元素,要么其中一个只有1个元素)。
在您的情况下,A
的形状为[2, 3]
,而b
的形状为[1, 3]
。第二个维度匹配,但因为b
的第一个维度只有一个元素,b
的元素是"广播"沿A
的第一维(两个元素)。