Расчет взвешенного скользящего среднего из 2 списков с использованием заданного окна - PullRequest
0 голосов
/ 08 октября 2018

Если у меня есть два списка:

a:1 2 3 4;
b:10 20 30 40;

Я хочу суммировать произведение двух списков в пределах окна 2. Таким образом, набор результатов должен быть:

10 50 130 250

Например, чтобы получить результат 130, это было бы (2 * 20) + (3 * 30) = 130

sums 2 mavg '(a*b)

, кажется, поможет мне частично, но окно 2 неприменяетсяЯ попытался поэкспериментировать с sum, sums, sum each, wavg, mavg и т. Д., И я полностью застрял.Может ли кто-нибудь помочь?Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

В качестве альтернативы вы можете использовать наречие каждый предыдущий:

q)+':[a*b]

Однако это будет работать только с размером окна 2, и если ваши данные содержат нулевые значения, их необходимо дополнить 0:

q)+':[0^a*b2]

На положительной ноте это быстрее, чем использование msum в этой ситуации.

q)\ts:1000000 +':[0^a*b2]
940 1264
q)\ts:1000000 2 msum a*b2
1556 1104
0 голосов
/ 08 октября 2018

Эта строка должна работать для вас:

2 msum a*b

, как показано здесь:

q)a:1 2 3 4
q)b:10 20 30 40
q)2 msum a*b
10 50 130 250

Для получения дополнительной информации о ключевом слове msum вы можетепроверьте страницу Kx Reference: https://code.kx.com/wiki/Reference/msum

Надеюсь, что это поможет!

...