【发布时间】:2017-04-21 14:22:16
【问题描述】:
这可能是一个基本问题,但我找不到解决方案:
我需要计算张量的平均值忽略任何非有限值。
例如mean([2.0, 3.0, inf, 5.0]) 应该返回3.333 而不是inf 也不是2.5。
我试过sess.run(tf.reduce_mean([2.0, 3.0, inf, 5.0])),但它返回inf。
【问题讨论】:
标签: python numpy tensorflow
这可能是一个基本问题,但我找不到解决方案:
我需要计算张量的平均值忽略任何非有限值。
例如mean([2.0, 3.0, inf, 5.0]) 应该返回3.333 而不是inf 也不是2.5。
我试过sess.run(tf.reduce_mean([2.0, 3.0, inf, 5.0])),但它返回inf。
【问题讨论】:
标签: python numpy tensorflow
您可以使用is_finite 和boolean_mask 的组合。
import tensorflow as tf
x = tf.constant([2, 3, float('Inf'), 5])
mymean = tf.reduce_mean(tf.boolean_mask(x, tf.is_finite(x)))
sess = tf.Session()
sess.run(mymean)
请注意,is_finite 也会删除 NaN 值。
【讨论】:
给出的答案几乎是正确的。关于忽略 non-finite 值的问题,答案只忽略 infinite 值。它们不是一回事,特别是关于 nan。
要真正忽略任何非有限值(包括 nan),请改用这个稍微简单的行:
mymean = tf.reduce_mean(tf.boolean_mask(x, tf.is_finite(x))
【讨论】: