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

帅比萌擦擦* 提交于 2019-12-03 08:27:21

问题


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.)


回答1:


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 wheremethod 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]]



回答2:


#assume that an array has 0, 3.069711,  3.167817.
mask = tf.greater(array, 0)
non_zero_array = tf.boolean_mask(array, mask)


来源:https://stackoverflow.com/questions/39219414/in-tensorflow-how-can-i-get-nonzero-values-and-their-indices-from-a-tensor-with

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!