2013-07-08 128 views
0

我的工作J.从矩阵阵列[J]

我如何转换这种矩阵:

(i.10)*/(i.10) 
0 0 0 0 0 0 0 0 0 0 
0 1 2 3 4 5 6 7 8 9 
0 2 4 6 8 10 12 14 16 18 
0 3 6 9 12 15 18 21 24 27 
0 4 8 12 16 20 24 28 32 36 
0 5 10 15 20 25 30 35 40 45 
0 6 12 18 24 30 36 42 48 54 
0 7 14 21 28 35 42 49 56 63 
0 8 16 24 32 40 48 56 64 72 
0 9 18 27 36 45 54 63 72 81 
在阵列

0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 . . . 

我试图

(i.10)*/(i.10)"0 

,然后我添加

~.(i.10)*/(i.10)"0 

消除双打,但它不工作。

回答

3

如果要将二维表(矩阵)转换为一维列表(向量或“数组”),尽管在J世界中“数组”通常表示“具有任意数量[N]维的矩形“),你可以使用拉威尔(,):

matrix =: (i.10)*/(i.10) 
    list =: , matrix 

    list 
0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 ... 

现在用小块(〜),删除重复应该工作:

~. list 
0 1 2 3 4 5 6 7 8 9 10 12 ... 

需要注意的是,为J,数组的形状通常携带重要信息,所以扁平化一个马像这样的trix将是相当不寻常的。但是,没有什么能阻止你。

顺便说一句,您可以用副词~,这将复制对子右侧的左参数,以及保存自己的一些按键,所以你可以只说:

matrix =: */~ i. 10 

,并获得与(i.10) */ (i.10)相同的结果。

+0

这是完美的!谢谢! :d –