In TensorFlow, how can I get nonzero values and their indices from a tensor with python?

Question:

I want to do something like this.
Let’s say we have a tensor A.

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

And I want to get nonzero values and their indices from it.

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

There are similar operations in Numpy.
`np.flatnonzero(A)` return indices that are non-zero in the flattened A.
`x.ravel()[np.flatnonzero(x)]` extract elements according to non-zero indices.
Here’s a link for these operations.

How can I do somthing like above Numpy operations in Tensorflow with python?
(Whether a matrix is flattened or not doesn’t really matter.)

You can achieve same result in Tensorflow using not_equal and where methods.

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

`where` is a tensor of the same shape as `A` holding `True` or `False`, in the following case

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

This would be sufficient to select zero or non-zero elements from `A`. If you want to obtain indices you can use `where`method as follows:

``````indices = tf.where(where)
``````

`where` tensor has two `True` values so `indices` tensor will have two entries. `where` tensor has rank of two, so entries will have two indices:

``````[[0, 0],
[1, 1]]
``````
``````#assume that an array has 0, 3.069711,  3.167817.
``````>>> A = [[1,0],[0,4]]