как дать отрицательные условия в tf.где tensorflow

#tensorflow #keras #indices

Вопрос:

Я хочу извлечь индексы тензора, где не выполняются определенные условия.

Например, мне нужны индексы строк тензора, в которых все столбцы не равны нулю.

 idx = tf.where(!(x[:,0]==x[:,1]==x[:,2]==0))
 

Есть ли какой-либо другой лучший способ извлечь такую информацию?

Ответ №1:

Извлечение индексов тензоров, все элементы которых отличаются от 0, равносильно поиску тензоров, сумма абсолютных значений элементов которых отличается от 0 (в случае, когда элементы ваших тензоров могут быть отрицательными).

 x = tf.constant([[2.0, 0., 4.0], [0., 0., 2.0], [-2.0, 0., 1.0]])

idx = tf.where(tf.reduce_sum(tf.abs(x), axis=0)!=0)
 

Выход:

 >>>print(idx)
tf.Tensor(
[[0]
 [2]], shape=(2, 1), dtype=int64)
 

tf.abs бесполезно, если все значения положительны.

Вы также можете использовать tf.math.logical_not , который отменяет условие:

 >>>print(tf.math.logical_not(x==0))
tf.Tensor(
[[ True False  True]
 [False False  True]
 [ True False  True]], shape=(3, 3), dtype=bool)
 

Комментарии:

1. Спасибо. Я использовал idx = tf.где(tf.reduce_sum(tf.abs(y_true), ось=1)!=0) # все (x,y,z) не равны нулю y_true = tf.gather_nd(y_true, idx)