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)