Что мне делать, если я хочу получить сумму каждых 3 элементов?
test_arr = [1,2,3,4,5,6,7,8]
Звучит как функция карты
map_fn(arr, parallel_iterations = True, lambda a,b,c : a+b+c)
и результат map_fn(test_arr)
должно быть
[6,9,12,15,18,21]
, что равно
[(1+2+3),(2+3+4),(3+4+5),(4+5+6),(5+6+7),(6+7+8)]
Я нашел решение после просмотра официальных документов: https://www.tensorflow.org/api_docs/python/tf/map_fn
import tensorflow as tf
def tf_map_elements_every(n, tf_op, input, dtype):
if n >= input.shape[0]:
return tf_op(input)
else:
return tf.map_fn(
lambda params: tf_op(params),
[input[i:i-n+1] if i !=n-1 else input[i:] for i in range(n)],
dtype=dtype
)
Тест
t = tf.constant([1, 2, 3, 4, 5, 6, 7, 8])
op = tf_map_elements_every(3, tf.reduce_sum, t, tf.int32)
sess = tf.Session()
sess.run(op)
[Out]: array([ 6, 9, 12, 15, 18, 21])