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
?那就行了,哈哈。感谢用户要关闭此问题,那么您是要删除您的问题,还是要等待解释它为什么有效?我对解释感兴趣:)