J中数字列表的运行顺序平均值

时间:2012-11-13 06:29:51

标签: j

我正在尝试在J中生成Sierpinski三角形(混沌游戏版本)。给定3个顶点生成它的一般迭代算法是:

point = (0, 0)
loop:
    v = randomly pick one of the 3 vertices
    point = (point + v) / 2
    draw point

我正在尝试用J创建惯用版。到目前为止,这就是我所拥有的:

load 'plot'

numpoints =: 200000
verticesx =: 0         0.5     1
verticesy =: 0 , (2 o. 0.5) ,  0

rolls =: ?. numpoints$3

pointsx =: -:@+ /\. rolls { verticesx
pointsy =: -:@+ /\. rolls { verticesy

'point' plot pointsx ; pointsy

这样可行,但我不确定我是否理解-:@+ /\.发生了什么。我认为这只是因为数学怪癖而起作用。我试图制作一个二元average函数,它可以像+ +/ \ i. 10avg一样在点列表中作为累积运行,但我无法得到类似的函数那工作。我该怎么做?

更新

要清楚,我正在尝试创建一个我可以这样使用的二进制函数avg /\ randompoints

avg =: -:@+
出于某种原因,

avg无效。所以我认为我遇到的问题是正确定义具有适当可变参数的{{1}}函数。

1 个答案:

答案 0 :(得分:1)

为了尽可能接近算法,我可能会做这样的事情:

v =: 3 2$ 0 0 0.5, (2 o. 0.5), 1 0
ps =: 1 2 $ (?3) { v
next =: 4 :'y,((?x){v) -:@+ ({: y)'

ps =: (3&next)^:20000 ps
'point' plot ({.;{:) |: ps

但你的版本很多效率更高。