Python 从TensorFlow中的矩阵中删除零向量
正如问题所说,我试图从张量中删除所有零向量(即Python 从TensorFlow中的矩阵中删除零向量,python,tensorflow,Python,Tensorflow,正如问题所说,我试图从张量中删除所有零向量(即[0,0,0,0]) 鉴于: array([[ 0. , 0. , 0. , 0. ], [ 0.19999981, 0.5 , 0. , 0. ], [ 0.4000001 , 0.29999995, 0.10000002, 0. ], ..., [-0.5999999 , 0.
[0,0,0,0]
)
鉴于:
array([[ 0. , 0. , 0. , 0. ],
[ 0.19999981, 0.5 , 0. , 0. ],
[ 0.4000001 , 0.29999995, 0.10000002, 0. ],
...,
[-0.5999999 , 0. , -0.0999999 , -0.20000005],
[-0.29999971, -0.4000001 , -0.30000019, -0.5 ],
[ 0. , 0. , 0. , 0. ]], dtype=float32)
我尝试了以下代码(受SO启发):
但是bool_mask
似乎也是形状(10000,4),就像它将x
张量中的每个元素都比较为零,而不是行
我考虑过使用tf.reduce_sum
,其中整行为零,但这也会忽略像[1,-1,0,0]
这样的行,我不希望这样
想法?一种可能的方法是对行的绝对值求和,这样就不会忽略像
[1,-1,0,0]
这样的行,然后将其与零向量进行比较。您可以这样做:
intermediate_tensor = reduce_sum(tf.abs(x), 1)
zero_vector = tf.zeros(shape=(1,1), dtype=tf.float32)
bool_mask = tf.not_equal(intermediate_tensor, zero_vector)
omit_zeros = tf.boolean_mask(x, bool_mask)
我尝试了鲁德雷斯·潘查的解决方案,但它对我不起作用。也许版本会改变。 我在第一行找到了tipo:
reduce\u sum(tf.abs(x),1)
->tf.reduce\u sum(tf.abs(x),1)
此外,布尔_掩码具有秩2而不是秩1,这是必需的:
张量:N-D张量。
掩码:K-D布尔张量,K只需将张量转换为tf.bool并将其用作布尔掩码:
boolean_mask = tf.cast(x, dtype=tf.bool)
no_zeros = tf.boolean_mask(x, boolean_mask, axis=0)
真不敢相信我想出了减少总和的办法,而且没有想到使用abs。似乎是一个合法的解决方案,我会努力确保它的工作和upvote+接受,如果适用
intermediate_tensor = tf.reduce_sum(tf.abs(x), 1)
zero_vector = tf.zeros(shape=(1,1), dtype=tf.float32)
bool_mask = tf.squeeze(tf.not_equal(intermediate_tensor, zero_vector))
omit_zeros = tf.boolean_mask(x, bool_mask)
boolean_mask = tf.cast(x, dtype=tf.bool)
no_zeros = tf.boolean_mask(x, boolean_mask, axis=0)