在 J 中创建 y 形随机浮点数组

Creating y shape random float array in J

我正在尝试创建 y 形随机浮点数组,这是我现在的状态:

input_dim =: 2
hidden_dim =: 16

0 ?@$ ~ (input_dim, hidden_dim) 

0.838135  0.96131 0.766721 0.420625 0.640265 0.683779 0.683311 0.427981 0.281479 0.305607 0.385446 0.898389  0.24596 0.452391 0.739534 0.973384
0.914155 0.172582 0.146184 0.624908 0.333564 0.132774 0.475515 0.802788 0.277571 0.146896  0.40596 0.735201 0.943969 0.259493 0.442858 0.374871

看起来这段代码 returns 正是我想要的,所以我尝试制作如下所示的函数:

rand =: 0 ?@$ ~

但是rand (input_dim, hidden_dim)给我一个语法错误...

我想我遗漏了一个非常重要的部分,但我不确定那是什么。

任何建议将不胜感激!

没有参数,0 ?@$ ~ 的语法是不明确的,解释器错误地分类了括号(或者,更准确地说,正确的括号不是你认为的那个)。 解决此问题的最简单方法是将 rand 定义为:

rand =: 3 :'0 ?@$ ~ y'

当然,任何其他消除句法歧义的方法也行得通:

rand =: [: ? 0 $~ ]
rand =: ?@(0$~])
rand =: ?@(0&($~))
...

你的动词唯一缺少的是 ]。 即:

   rand =: 0 ?@$~ ]
   rand 2 3
0.891663 0.888594 0.716629
  0.9962 0.477721 0.946355

你可能会感到困惑,因为你想创建一个 (noun verb verb) 形式的 fork,但是 ~ 是一个副词,因此与它左边的动词结合起来创建一个新的动词(在你的情况下 ?@$~)所以你的 rand 的形式是 (0 ?@$~)(noun verb) J 无法识别 - 因此语法错误。

如果可能,使用组合 ?@$ 是有意义的,因为它受 special code 支持并且不会创建 x $ y.