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.)
nonzero() function is used to Compute the indices of the elements that are non-zero. It returns a tuple of arrays, one for each dimension of arr, containing the indices of the non-zero elements in that dimension. The corresponding non-zero values in the array can be obtained with arr[nonzero(arr)] .
Each tensor object is defined with tensor attributes like a unique label (name), a dimension (shape) and TensorFlow data types (dtype). You can define a tensor with decimal values or with a string by changing the type of data.
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. mask = tf.greater(array, 0) non_zero_array = tf.boolean_mask(array, mask)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With