En TensorFlow, ¿cómo puedo obtener valores distintos de cero y sus índices de un tensor con python?
indices (2)
Puede obtener el mismo resultado en Tensorflow utilizando not_equal y where métodos.
zero = tf.constant(0, dtype=tf.float32)
where = tf.not_equal(A, zero)
where
es un tensor de la misma forma que A
manteniendo True
o False
, en el siguiente caso
[[True, False],
[False, True]]
Esto sería suficiente para seleccionar cero o elementos no cero de A
Si desea obtener índices, puede utilizar el método where
siguiente manera:
indices = tf.where(where)
where
tensor tiene dos valores True
, por lo que los indices
tendrán dos entradas. where
tensor tiene rango de dos, por lo que las entradas tendrán dos índices:
[[0, 0],
[1, 1]]
Quiero hacer algo como esto.
Digamos que tenemos un tensor A.
A = [[1,0],[0,4]]
Y quiero obtener valores distintos de cero y sus índices.
Nonzero values: [1,4]
Nonzero indices: [[0,0],[1,1]]
Hay operaciones similares en Numpy.
np.flatnonzero(A)
devuelve índices que son distintos de cero en el aplanado A.
x.ravel()[np.flatnonzero(x)]
extrae elementos de acuerdo con índices distintos de cero.
Aquí hay un enlace para estas operaciones.
¿Cómo puedo hacer algo como las operaciones anteriores de Numpy en Tensorflow con python?
(Si una matriz es aplanada o no realmente no importa).
#assume that an array has 0, 3.069711, 3.167817.
mask = tf.greater(array, 0)
non_zero_array = tf.boolean_mask(array, mask)