从矩阵中删除小值

时间:2017-02-03 13:26:36

标签: python tensorflow

我有一个(n, m)张量X,我希望将所有小于某个阈值t的值清零。即,

X = X * tf.cast(tf.greater(X, t), X.dtype)

我在想,有没有更有效的方法来做到这一点?由于我的设置中的X很大,而且据我所知,tf.cast(tf.greater(X, t), X.dtype)构建了一个需要与X一样多的内存的其他张量。

4 个答案:

答案 0 :(得分:1)

我不确定这是否更有效

x = tf.constant([1, 2, 3, 4, 5, 6, 7])
y = tf.where(tf.greater(x, tf.constant(5)),
             x, # if ture
             tf.zeros_like(x)) # if false

with tf.Session() as sess:
    a = sess.run(y)
    # a is [0, 0, 0, 0, 0, 6, 7]

答案 1 :(得分:0)

旧的

有什么问题
for i in range(n):
   for j in range(m):
      if X[n][m] < t: X[n][m] = 0

答案 2 :(得分:0)

如果X是你的矩阵(我假设是一个numpy数组),你可以尝试:

x[x<small_value]=0

如果创建布尔数组占用太多内存,您可以尝试通过各个列的循环来执行此操作。

答案 3 :(得分:0)

foo = tf.constant([1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
threshold_map = tf.greater(foo, tf.constant(5.))
threshold_map_index = tf.reshape(tf.where(threshold_map), [-1])
foo_threshold = tf.gather(foo, threshold_map_index)
# foo_threshold = [6., 7., 8., 9., 10.]

赢了&#39; t 使用超过一维的工作)