Gremlin遍历从列表中的元素中减去值

Gremlin遍历从列表中的元素中减去值,gremlin,janusgraph,Gremlin,Janusgraph,使用gods示例的图表并添加以下“amount”属性: rand = new Random() g.withSack {rand.nextFloat()}.E().property('amount',sack()) 下面的遍历基于(Ai-平均值(A))和(双平均值(B))项的计算目标: 遍历的输出: ==>[a1:[v1:v[4096],v2:v[4248],a1:[0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],a2:[0.7349

使用gods示例的图表并添加以下“amount”属性:

rand = new Random()
g.withSack {rand.nextFloat()}.E().property('amount',sack())
下面的遍历基于(Ai-平均值(A))和(双平均值(B))项的计算目标:

遍历的输出:

==>[a1:[v1:v[4096],v2:v[4248],a1:[0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],a2:[0.7349615,0.80212617,0.6879539],a1m:0.5197273015975952,a2m:0.7416805227597555]]
==>[a1:[v1:v[4096],v2:v[4264],a1:[0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],a2:[0.37226892,0.8902944,0.4158439,0.9709829],a1m:0.5197273015975952,a2m:0.6623472535822001]
==>[a1:[v1:v[8192],v2:v[4096],a1:[0.32524675],a2:[0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],a1m:0.325246713084116,a2m:0.5197273015975952]]
==>[a1:[v1:v[8192],v2:v[4184],a1:[0.32524675],a2:[0.53761715,0.9604127,0.87463444,0.7719325],a1m:0.3252467513084116,a2m:0.786149188876152]]
==>[a1:[v1:v[8192],v2:v[4248],a1:[0.32524675],a2:[0.7349615,0.80212617,0.6879539],a1m:0.325246753084116,a2m:0.7416805227597555]]
==>[a1:[v1:v[8192],v2:v[4264],a1:[0.32524675],a2:[0.37226892,0.8902944,0.4158439,0.9709829],a1m:0.32524675513084116,a2m:0.66234755822001]]
==>[a1:[v1:v[4184],v2:v[4096],a1:[0.53761715,0.9604127,0.87463444,0.7719325],a2:[0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],a1m:0.786149188876152,a2m:0.51972730159752]]
==>[a1:[v1:v[4184],v2:v[8192],a1:[0.53761715,0.9604127,0.87463444,0.7719325],a2:[0.32524675],a1m:0.786149188876152,a2m:0.325246713084116]]
==>[a1:[v1:v[4248],v2:v[4096],a1:[0.7349615,0.80212617,0.6879539],a2:[0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],a1m:0.7416805227597555,a2m:0.51972730159752]]
==>[a1:[v1:v[4248],v2:v[8192],a1:[0.7349615,0.80212617,0.6879539],a2:[0.32524675],a1m:0.7416805227597555,a2m:0.325246753084116]]
==>[a1:[v1:v[4264],v2:v[4096],a1:[0.37226892,0.8902944,0.4158439,0.9709829],a2:[0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],a1m:0.662347752535822001,a2m:0.51972730159752]]


有人如何从遍历的这一点计算“a1-a1m”和“a2-a2m”?这里的问题是从列表中的每个元素中减去一个值,然后返回差异列表,任何示例帮助都会很好。

既然map中已经有了所有值,让我们从这里开始

gremlin> __.inject(['a1': [0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],
......1>            'a2': [0.7349615,0.80212617,0.6879539],
......2>            'a1m': 0.5197273015975952,
......3>            'a2m': 0.7416805227597555])
==>[a1:[0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],a2:[0.7349615,0.80212617,0.6879539],a1m:0.5197273015975952,a2m:0.7416805227597555]
从每个单个值(ai)中减去平均值(am)与展开
a
一样简单,进行数学运算(
ai am
(am ai)*(-1)
)并将它们折叠在一起:

gremlin> __.inject(['a1': [0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],
......1>            'a2': [0.7349615,0.80212617,0.6879539],
......2>            'a1m': 0.5197273015975952,
......3>            'a2m': 0.7416805227597555]).
......4>    sack(assign).
......5>      by(select('a1m')).
......6>    select('a1').unfold().
......7>    sack(minus).
......8>    sack(mult).
......9>      by(constant(-1)).
.....10>    sack().fold()
==>[-0.2139474315975952,0.3218897984024048,0.0050581984024048,0.0551158684024048,-0.1681164615975952]
因此,对于这两个值,它只是另一个投影:

gremlin> __.inject(['a1': [0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],
......1>            'a2': [0.7349615,0.80212617,0.6879539],
......2>            'a1m': 0.5197273015975952,
......3>            'a2m': 0.7416805227597555]).
......4>    project('a','b').
......5>      by(sack(assign).
......6>           by(select('a1m')).
......7>         select('a1').unfold().
......8>         sack(minus).
......9>         sack(mult).
.....10>           by(constant(-1)).
.....11>         sack().fold()).
.....12>      by(sack(assign).
.....13>           by(select('a2m')).
.....14>         select('a2').unfold().
.....15>         sack(minus).
.....16>         sack(mult).
.....17>           by(constant(-1)).
.....18>         sack().fold())
==>[a:[-0.2139474315975952,0.3218897984024048,0.0050581984024048,0.0551158684024048,-0.1681164615975952],b:[-0.0067190227597555,0.0604456472402445,-0.0537266227597555]]
我想还有几个步骤可以得出最终的值,我相信最终的查询可以简化很多,但最好在另一个线程中处理

gremlin> __.inject(['a1': [0.30577987,0.8416171,0.5247855,0.57484317,0.35161084],
......1>            'a2': [0.7349615,0.80212617,0.6879539],
......2>            'a1m': 0.5197273015975952,
......3>            'a2m': 0.7416805227597555]).
......4>    project('a','b').
......5>      by(sack(assign).
......6>           by(select('a1m')).
......7>         select('a1').unfold().
......8>         sack(minus).
......9>         sack(mult).
.....10>           by(constant(-1)).
.....11>         sack().fold()).
.....12>      by(sack(assign).
.....13>           by(select('a2m')).
.....14>         select('a2').unfold().
.....15>         sack(minus).
.....16>         sack(mult).
.....17>           by(constant(-1)).
.....18>         sack().fold())
==>[a:[-0.2139474315975952,0.3218897984024048,0.0050581984024048,0.0551158684024048,-0.1681164615975952],b:[-0.0067190227597555,0.0604456472402445,-0.0537266227597555]]