web-dev-qa-db-fra.com

Dans TensorFlow, comment puis-je obtenir des valeurs non nulles et leurs indices à partir d'un tenseur avec python?

Je veux faire quelque chose comme ça.
Disons que nous avons un tenseur A.

A = [[1,0],[0,4]]

Et je veux en obtenir des valeurs non nulles et leurs indices.

Nonzero values: [1,4]  
Nonzero indices: [[0,0],[1,1]]

Il existe des opérations similaires dans Numpy.
np.flatnonzero(A) renvoie des indices qui sont non nuls dans le A. aplati.
x.ravel()[np.flatnonzero(x)] extrait les éléments selon des indices non nuls.
Voici n lien pour ces opérations.

Comment puis-je faire quelque chose comme les opérations Numpy ci-dessus dans Tensorflow avec python?
(Qu'une matrice soit aplatie ou non n'a pas vraiment d'importance.)

21
ByungSoo Ko

Vous pouvez obtenir le même résultat dans Tensorflow en utilisant les méthodes not_equal et where .

zero = tf.constant(0, dtype=tf.float32)
where = tf.not_equal(A, zero)

where est un tenseur de la même forme que A contenant True ou False, dans le cas suivant

[[True, False],
 [False, True]]

Cela suffirait pour sélectionner des éléments zéro ou non nul dans A. Si vous souhaitez obtenir des indices, vous pouvez utiliser la méthode where comme suit:

indices = tf.where(where)

where tenseur a deux valeurs True donc indices tenseur aura deux entrées. where le tenseur a un rang de deux, donc les entrées auront deux indices:

[[0, 0],
 [1, 1]]
34
Sergii Gryshkevych
#assume that an array has 0, 3.069711,  3.167817.
mask = tf.greater(array, 0)
non_zero_array = tf.boolean_mask(array, mask)
3
user1098761