Matrix 向矩阵的每一列添加一个数字

Matrix 向矩阵的每一列添加一个数字,matrix,tensorflow,vectorization,Matrix,Tensorflow,Vectorization,我有一个矩阵 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.mat

我有一个矩阵

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"

但这样做似乎非常浪费,而且必须构建一个完整的辅助矩阵,我们最终会抛弃它。有没有一种更为自动化的方法来完成这项工作而不必编写我自己的op?

如前所述,您可以执行
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)
这样做之所以有效,是因为阵列广播。这个网站有很好的信息,tensorflow广播也以同样的方式工作。基本上,对于每个维度(从尾随维度移动到前导维度),tensorflow/numpy会尝试检查维度是否兼容(要么它们具有相同数量的元素,要么其中一个只有1个元素)


在您的情况下,
A
的形状是
[2,3]
b
的形状是
[1,3]
。第二维度匹配,但是因为
b
的第一维度只有一个元素,
b
的元素沿着
a
的第一维度(两个元素)被“广播”。

为什么不简单地
a+b
?那就行了,哈哈。感谢用户要关闭此问题,那么您是要删除您的问题,还是要等待解释它为什么有效?我对解释感兴趣:)