我有一个(n, m)
张量X
,我希望将所有小于某个阈值t
的值清零。即,
X = X * tf.cast(tf.greater(X, t), X.dtype)
我在想,有没有更有效的方法来做到这一点?由于我的设置中的X
很大,而且据我所知,tf.cast(tf.greater(X, t), X.dtype)
构建了一个需要与X
一样多的内存的其他张量。
答案 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 使用超过一维的工作)