2017-06-25 4 views
0

Genau wie die Frage sagt, ich versuche, alle Nullen Vektoren (d. H. [0, 0, 0, 0]) von einem Tensor zu entfernen.Entfernen Sie Null Vektoren aus einer Matrix in TensorFlow

Gegeben:

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) 

ich den folgenden Code versucht hatte (inspiriert von this SO):

x = tf.placeholder(tf.float32, shape=(10000, 4)) 

zeros_vector = tf.zeros(shape=(1, 4), dtype=tf.float32) 
bool_mask = tf.not_equal(x, zero_vector) 

omit_zeros = tf.boolean_mask(x, bool_mask) 

Aber bool_mask scheinen auch von Form (10000, 4) zu sein, wie es war Vergleichen jedes Elements im x Tensor mit Null und nicht Zeilen.

Ich dachte über die Verwendung tf.reduce_sum, wo eine ganze Zeile Null ist, aber das wird auch Zeilen wie [1, -1, 0, 0] weglassen und ich will das nicht.

Ideen?

Antwort

2

Ein möglicher Weg wäre, die absoluten Werte der Zeile zu summieren, auf diese Weise werden Zeilen wie [1, -1, 0, 0] nicht weggelassen und dann mit einem Nullvektor verglichen. Sie können so etwas tun:

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) 
+0

kann ich nicht glauben, dass ich herausgefunden habe "reduce_sum" und dachte nicht an "abs". scheint eine legitime Lösung, ich werde versuchen, sicherzustellen, dass es funktioniert und upvote + akzeptieren, falls zutreffend – bluesummers

Verwandte Themen