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.)
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]]
#assume that an array has 0, 3.069711, 3.167817.
mask = tf.greater(array, 0)
non_zero_array = tf.boolean_mask(array, mask)