Подтвердить что ты не робот

В TensorFlow, как я могу получить ненулевые значения и их индексы от тензора с помощью python?

Я хочу сделать что-то вроде этого. Пусть говорят, что у нас есть тензор А.

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

И я хочу получить ненулевые значения и их индексы.

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

В Numpy есть аналогичные операции.
np.flatnonzero(A) возвратные индексы, отличные от нуля в сплющенном A.
x.ravel()[np.flatnonzero(x)] извлекать элементы в соответствии с ненулевыми индексами.
Здесь ссылка для этих операций.

Как я могу сделать что-то вроде операций Numpy в Tensorflow с помощью python?
(Независимо от того, сглажена матрица или нет, это не имеет большого значения.)

4b9b3361

Ответ 1

Вы можете достичь такого же результата в Tensorflow, используя not_equal и where.

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

where - тензор той же формы, что и A, удерживающий True или False, в следующем случае

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

Этого было бы достаточно, чтобы выбрать нулевые или ненулевые элементы из A. Если вы хотите получить индексы, вы можете использовать метод where следующим образом:

indices = tf.where(where)

where тензор имеет два значения True, поэтому тензор indices будет иметь две записи. where имеет ранг из двух, поэтому записи будут иметь два индекса:

[[0, 0],
 [1, 1]]