我有以下代码:
import numpy as np
import tensorflow as tf
a = np.array([0.5, 0.5])
b = np.array([0.2, 0.2, 0.0, 0.0])
non_zeros = ~tf.equal(b, 0.)
cast_op = tf.cast(non_zeros, tf.float64)
new_vec = tf.multiply(a, cast_op) # won't work
# the required output is [0.5, 0.5, 0.0, 0.0]
我正在尝试获取向量[0.5, 0.5, 0.0, 0.0]
,如代码中所述。有谁知道如何做到这一点?我还查看了tf.fill
,但这具有标量值,因此对我不起作用。
答案 0 :(得分:0)
您会收到错误消息,因为basic_ack
期望张量具有相同的形状。但是,您可以做的就是简单地做到这一点:
tf.multiply
答案 1 :(得分:0)
您可以利用tf.multiply
操作的广播功能。
我在每行旁边添加了张量的形状:请注意使用tf.expand_dims
向1
张量中添加a
维度,以便在乘法,形状为(2,4)
的张量。
此张量具有重复值(2行,等于4列),因此我们可以只取第一行
import numpy as np
import tensorflow as tf
a = np.array([0.5, 0.5]) #(2)
b = np.array([0.2, 0.2, 0.0, 0.0]) #(4)
non_zeros = ~tf.equal(b, 0.) #(4)
cast_op = tf.cast(non_zeros, tf.float64) # (4)
new_vec = tf.multiply(tf.expand_dims(a, axis=[1]),
cast_op) # (2, 1) * (4) = (2, 4)
new_vec = new_vec[0, :] # (4)
print(new_vec)
sess = tf.InteractiveSession()
print(sess.run(new_vec))
此代码产生[0.5 0.5 0. 0.]