用于创建数字矩阵的最简洁的J语法

时间:2010-09-17 20:52:38

标签: j

想象一下,我想从1到3中取数字并形成一个矩阵,以便表示每个可能的配对,例如,

1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

这是我用J制定的一元动词:

($~ (-:@# , 2:)) , ,"0/~ 1+i.y

最初我曾认为,"0/~ 1+i.y就足够了,但遗憾的是产生了以下输出:

1 1
1 2
1 3

2 1
2 2
2 3

3 1
3 2
3 3

换句话说,它的形状是3 3 2,我想要一些形状为9的东西。我能想到解决它的唯一方法是将所有数据倒入一个新的形状。我确信必须有一种更简洁的方法来做到这一点。有人知道吗?

3 个答案:

答案 0 :(得分:5)

可以简化重塑中间结果的过程。删除最顶层的轴通常使用,/,因此在您的情况下,完成的短语可以是,/ ,"0/~ 1+i.y

答案 1 :(得分:4)

一种方式(在排列编目的容量中使用{作为monad):

>,{ 2#<1+i.y

编辑:

这个方案有一些乐趣:

所有可能的排列:

>,{ y#<1+i.y

按顺序配置数字:

>,{ x#<1+i.y

答案 2 :(得分:2)

我意识到这个问题已经过时了,但有一种更简单的方法:在三进制中计数到9,然后加1。

   1 + 3 3 #: i.9
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

3 3 & #:为您提供两位数字。一般的“基础3”动词是3 & #.^:_1