Python 在第一维上使用广播进行成对乘法

Python pair-wise multiplication using broadcasting on the first dimension

我有形状为 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 * m 和所有其他子矩阵变为零(因为所有其他元素在 v 中为零)为:

prod = [[[0,0,0],[0,0,0]], [[5,6,7],[7,8,9]] , [[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 )

输出:

array([[[0., 0., 0.], [0., 0., 0.]], [[5., 6., 7.], [7., 8., 9.]], [[0., 0., 0.], [0., 0., 0.]]], dtype=float32)