Если ваш входной список не большой, вы можете использовать метод, упомянутый здесь: https://code.kx.com/q/cookbook/programming-idioms/#how-do-i-apply-a-function-to-a-sequence-sliding-window
Использует наречие 'scan'.Поскольку этот процесс создает несколько списков, которые могут быть неэффективными для больших списков.
Другое решение, использующее сканирование:
q)f:{sum y*next\[z;x]} / x-input list, y-weights, z-window size-1
q)f[x;-3 -1 1 3;3]
Эта функция также создает несколько списков, поэтому, опять же, может быть не очень эффективна для большихlists.
Другой вариант - использовать индексы для извлечения целевых элементов из списка ввода и выполнения вычислений.Это будет работать только для списка ввода.
q) f:{[l;w;i]sum w*l i+til 4} / w- weight, l- input list, i-current index
q) f[x;-3 -1 1 3]@'til count x
Это очень простая функция.Вы можете добавить больше переменных в соответствии с вашими требованиями.