Один из вариантов - создать логический индекс, протестировав индекс диапазона:
import numpy as np
start, step = 2, 3
a[np.arange(len(a)) % step != start]
# array([1, 2, 4, 5, 7, 8])
Аналогичным образом можно добиться этого в тензорном потоке, используя tf.boolean_mask
:
import tensorflow as tf
a = tf.constant([1, 2, 3, 4, 5, 6, 7, 8])
start, step = 2, 3
mask = ~tf.equal(tf.range(a.shape[-1]) % step, start)
tf.boolean_mask(a, mask).eval()
# array([1, 2, 4, 5, 7, 8], dtype=int32)
Если a
- тензор ND, ось можно указать с помощью boolean_mask
;4D тензор [партия, ширина, высота, каналы] , например, для выбора по четвертой оси, то есть channels
, вы можете установить axis=3
:
mask = ~tf.equal(tf.range(a.shape[-1]) % step, start)
tf.boolean_mask(a, mask, axis=3)