【问题标题】:Compute Avg of list value for each element in Neo4j计算 Neo4j 中每个元素的列表值的平均值
【发布时间】:2020-06-18 12:58:34
【问题描述】:

要解决的问题是:

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]

但无法为 n 列表的动态数量计算。 list 的大小是常数,需要计算 avg。

Neo4j Desktop Graph 版本:3.5.18

APOC 库:3.5.0.12

提前致谢!

【问题讨论】:

    标签: neo4j cypher average neo4j-apoc


    【解决方案1】:

    假设您将“子列表”列表作为parameterlist 传递,这可能对您有用:

    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 用于生成单个列表,其中包含相应子列表元素的总和。

    【讨论】:

    • 谢谢@cybersam。它就像一个魅力!只是想更新一下如何在 Neo4j 中使用参数。 :param list => [[1, 1, 1], [2, 2, 2], [3, 3, 3]] 供进一步参考。
    • :param 是一个特定于 neo4j 浏览器的命令。您传递参数的方式取决于您用于执行 Cypher 的 API 或工具。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2018-06-21
    • 2013-06-07
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多