J语言循环^:
loop in J language ^:
假设我在二维图上有10个随机点,每个点都与spring相连。所以每次迭代时,每个点都会收敛到力的中心。
我想做的是一个循环,在每次迭代后将随机向量添加到现有向量集。
所以它从
开始
v=: <(? 10 2 $ 20) NB. 10 random vectors
n=: <(? 1 2 $ 20) NB. new random vector
force v NB. force function moves the vectors toward to the center
add n NB. add n into v, then #v = 11
force v
add n
force v
add n
...
我还在研究 force 函数,这看起来并不难,但我真的卡在了 add 部分。谁可以帮我这个事?
我的最终目标是让一个循环重复 add force 部分 100 次
谢谢!
看起来您想要做的是拆箱 v
和 n
,然后 ,
(追加)。做到这一点的方法是使用 each=: &.>
,它使用 &.
(不足)和 >
(开放)。
, each
打开,执行附加操作,然后关闭。
v=.<(? 10 2 $ 20)
v
+-----+
| 9 11|
| 1 4|
| 8 3|
| 3 12|
| 5 4|
| 7 11|
|10 11|
| 9 10|
| 0 8|
| 6 16|
+-----+
n=: <(? 1 2 $ 20)
n
+----+
|13 8|
+----+
n , each v
+-----+
|13 8|
| 9 11|
| 1 4|
| 8 3|
| 3 12|
| 5 4|
| 7 11|
|10 11|
| 9 10|
| 0 8|
| 6 16|
+-----+
each
&.>
我同意 Eelvex 的观点,即这些框似乎是多余的。也许以下是思考您要完成的目标的有用方法?
new=: 2 ?@$ 20"_ NB. generates random, length 2 vector
add=: ] , new NB. appends new to right argument
add^:(3) Init=: 4 2 ?@$ 20
11 9
9 16
9 13
0 17
3 3
7 17
6 6
如果你有一个动词 force
你也可以在每次迭代中应用它:
force=: -: NB. example verb (halves right argument)
force@add^:(5) Init=: 4 2 ?@$ 20 NB. 5 iterations
0.46875 0.3125
0.15625 0.53125
0.28125 0.53125
0.5625 0.53125
0.59375 0.59375
1.125 0.375
0.125 2.375
2.25 3.5
5 9.5
假设我在二维图上有10个随机点,每个点都与spring相连。所以每次迭代时,每个点都会收敛到力的中心。
我想做的是一个循环,在每次迭代后将随机向量添加到现有向量集。
所以它从
开始v=: <(? 10 2 $ 20) NB. 10 random vectors
n=: <(? 1 2 $ 20) NB. new random vector
force v NB. force function moves the vectors toward to the center
add n NB. add n into v, then #v = 11
force v
add n
force v
add n
...
我还在研究 force 函数,这看起来并不难,但我真的卡在了 add 部分。谁可以帮我这个事? 我的最终目标是让一个循环重复 add force 部分 100 次
谢谢!
看起来您想要做的是拆箱 v
和 n
,然后 ,
(追加)。做到这一点的方法是使用 each=: &.>
,它使用 &.
(不足)和 >
(开放)。
, each
打开,执行附加操作,然后关闭。
v=.<(? 10 2 $ 20)
v
+-----+
| 9 11|
| 1 4|
| 8 3|
| 3 12|
| 5 4|
| 7 11|
|10 11|
| 9 10|
| 0 8|
| 6 16|
+-----+
n=: <(? 1 2 $ 20)
n
+----+
|13 8|
+----+
n , each v
+-----+
|13 8|
| 9 11|
| 1 4|
| 8 3|
| 3 12|
| 5 4|
| 7 11|
|10 11|
| 9 10|
| 0 8|
| 6 16|
+-----+
each
&.>
我同意 Eelvex 的观点,即这些框似乎是多余的。也许以下是思考您要完成的目标的有用方法?
new=: 2 ?@$ 20"_ NB. generates random, length 2 vector
add=: ] , new NB. appends new to right argument
add^:(3) Init=: 4 2 ?@$ 20
11 9
9 16
9 13
0 17
3 3
7 17
6 6
如果你有一个动词 force
你也可以在每次迭代中应用它:
force=: -: NB. example verb (halves right argument)
force@add^:(5) Init=: 4 2 ?@$ 20 NB. 5 iterations
0.46875 0.3125
0.15625 0.53125
0.28125 0.53125
0.5625 0.53125
0.59375 0.59375
1.125 0.375
0.125 2.375
2.25 3.5
5 9.5