tf.where () в широковещательных массивах - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть два массива (х 1D и у 2D). Я рассчитал массив "diff", который в основном является разницей вещания (x-y [:, None]) Я хотел бы заменить все нули в массиве "diff" большим значением (скажем, 10000). Эта операция тривиальна в numpy, как вы видите ниже:

x=np.array([1.0,1.0,1.0])
y=np.array([[1.0,1.0,1.0],[0.0,0.0,0.0]])
diff = x - y[:, None]
diff = np.where(diff==0.0,10000,diff)

Однако я не могу воспроизвести такое же поведение в Tensorflow. Я попробовал следующий блок кода.

x = tf.placeholder(tf.float32) 
y = tf.placeholder(tf.float32)
diff = x - y[:,None]
diff_zero = tf.cast(tf.zeros_like(diff),tf.float32)
diff_big = tf.cast(tf.ones_like(diff)*100000,tf.float32)

diff = tf.where(diff==diff_zero, diff_big, diff)

sess = tf.Session()
diff_array = sess.run(diff, feed_dict={x: [1.0,1.0,1.0], y: [[1.0,1.0,1.0],[0.0,0.0,0.0]]})

Любой обходной путь приветствуется.

1 Ответ

0 голосов
/ 28 апреля 2018

Я разобрался, как это сделать. Мне пришлось использовать tf.equal () вместо "==". Следующие строки кода сделали эту работу точно так же, как numpy.

x = tf.placeholder(tf.float32) 
y = tf.placeholder(tf.float32)
diff = x - y[:,None]

diff_zero = tf.cast(tf.zeros_like(diff),tf.float32)
diff_big = tf.cast(tf.ones_like(diff)*100000,tf.float32)

condition = tf.equal(diff_zero, diff)
diff = tf.where(condition, diff_big, diff)
sess = tf.Session()

diff_array = sess.run(diff, feed_dict={x: [1.0,1.0,1.0], y: [[1.0,1.0,1.0],[0.0,0.0,0.0]]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...