2024-05-13 20:14:16 发布
网友
如何计算tensorflow中列表的中值? 就像
node = tf.median(X)
X是占位符 在numpy中,我可以直接使用np.median来得到中值。如何使用tensorflow中的numpy操作?
编辑:此答案已过时,请改用Lucas Venezian Povoa的解决方案。它更简单更快。
可以使用以下方法计算tensorflow内部的中值:
def get_median(v): v = tf.reshape(v, [-1]) mid = v.get_shape()[0]//2 + 1 return tf.nn.top_k(v, mid).values[-1]
如果X已经是向量,则可以跳过重塑。
如果您关心中值是偶数大小向量的两个中间元素的平均值,则应改为使用此值:
def get_real_median(v): v = tf.reshape(v, [-1]) l = v.get_shape()[0] mid = l//2 + 1 val = tf.nn.top_k(v, mid).values if l % 2 == 1: return val[-1] else: return 0.5 * (val[-1] + val[-2])
我们可以修改BlueSun的解决方案,使其在GPU上更快:
def get_median(v): v = tf.reshape(v, [-1]) m = v.get_shape()[0]//2 return tf.reduce_min(tf.nn.top_k(v, m, sorted=False).values)
这与(以我的经验)使用tf.contrib.distributions.percentile(v, 50.0)一样快,并返回一个实际元素。
tf.contrib.distributions.percentile(v, 50.0)
要使用tensorflow计算数组的中值,可以使用^{}函数,因为第50个百分点是中值。
tensorflow
import tensorflow as tf import tensorflow_probability as tfp import numpy as np np.random.seed(0) x = np.random.normal(3.0, .1, 100) median = tfp.stats.percentile(x, 50.0, interpolation='midpoint') tf.Session().run(median)
上面的代码相当于^{}(x, 50, interpolation='midpoint')。
(x, 50, interpolation='midpoint')
编辑:此答案已过时,请改用Lucas Venezian Povoa的解决方案。它更简单更快。
可以使用以下方法计算tensorflow内部的中值:
如果X已经是向量,则可以跳过重塑。
如果您关心中值是偶数大小向量的两个中间元素的平均值,则应改为使用此值:
我们可以修改BlueSun的解决方案,使其在GPU上更快:
这与(以我的经验)使用
tf.contrib.distributions.percentile(v, 50.0)
一样快,并返回一个实际元素。要使用} 函数,因为第50个百分点是中值。
tensorflow
计算数组的中值,可以使用^{上面的代码相当于^{}
(x, 50, interpolation='midpoint')
。相关问题 更多 >
编程相关推荐