在旧的基础上创建新的张量

时间:2018-07-19 14:18:53

标签: python tensorflow

我有以下代码:

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,但这具有标量值,因此对我不起作用。

2 个答案:

答案 0 :(得分:0)

您会收到错误消息,因为basic_ack期望张量具有相同的形状。但是,您可以做的就是简单地做到这一点:

tf.multiply

答案 1 :(得分:0)

您可以利用tf.multiply操作的广播功能。

我在每行旁边添加了张量的形状:请注意使用tf.expand_dims1张量中添加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.]