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