Вычислить среднее значение списка для каждого элемента в Neo4j - PullRequest
1 голос
/ 18 июня 2020

Задача, которую необходимо решить:

List: [x1, y1, z1], [x2, y2, z2] ...[xn, yn, zn]

Ожидаемый результат:

[(x1+x2+..+xn)/n, (y1+y2+..yn)/n, (z1+z2+..+z3)/n]

`

Я могу выполнить сложение, когда у меня 2 только список и размер фиксируется с помощью приведенного ниже оператора:

UNWIND(apoc.coll.zip([1,2,3], [4,5,6])) as output

RETURN COLLECT(apoc.coll.avg(output))

Результат:

[2.5, 3.5, 4.5]

Но не удалось выполнить компиляцию для динамики c количество n список. Размер списка является постоянным, для которого необходимо вычислить среднее значение.

Версия Neo4j Desktop Graph : 3.5.18

APO C Библиотека : 3.5.0.12

Заранее спасибо!

1 Ответ

0 голосов
/ 18 июня 2020

Предполагая, что вы передаете список «подсписок» как параметр , list, это может сработать для вас:

RETURN [w IN
  REDUCE(s = [], sublist IN $list | CASE
    WHEN SIZE(s) = 0 THEN sublist
    ELSE [i IN RANGE(0, SIZE(s)-1) | s[i] + sublist[i]]
    END) |
  w / TOFLOAT(SIZE($list))] AS result

REDUCE используется для создания единый список с суммами соответствующих элементов подсписка.

...