我有1 * n
形状的单热矢量v= [0.0, 1.0, 0.0] for n = 3
和形状n * m * r的矩阵为(m和r可以是任意数,但第一个维数为n)
m = [[[1,2,3,],[4,5,6]], [[5,6,7],[7,8,9]], [[2,4,7],[1,8,9]]]
我想使用广播机制将a * b多个,使得只有与向量v中的 1.0 元素对应的子矩阵保持在v * m和所有其他子矩阵的乘法中变为零(因为所有其他元素在v中为零)为:
prod = [[[0,0,0],[0,0,0]], [[5,6,7],[7,8,9]] , [[0,0,0],[0,0,0]]]
答案 0 :(得分:0)
在Tensorflow中,您基本上希望将额外的维度添加到维度的末尾,否则广播将发生在最后一个维度中。所以这段代码就像你想要的那样:
import tensorflow as tf
sess = tf.Session()
v= [0.0, 1.0, 0.0]
vT = tf.expand_dims( tf.expand_dims( tf.constant( v, dtype = tf.float32 ), axis = -1 ), axis = -1 )
m = [[[1,2,3],[4,5,6]], [[5,6,7],[7,8,9]], [[2,4,7],[1,8,9]]]
mT = tf.constant( m, dtype = tf.float32 )
prodT = vT * mT
#prod = [[[0,0,0],[0,0,0]], [[5,6,7],[7,8,9]] , [[0,0,0],[0,0,0]]]
sess.run( prodT )
输出:
数组([[[0。,0.,0。],[0.,0.,0。]],[[5.,6.,7。],[7.,8,9,9 。]],[[0.,0.,0。],[0.,0.,0。]]],dtype = float32)