4

J,我有一个类似的列表,1 2 3我想把它做成一个盒子结构*:2*

┌─┬─┐
│1│2│
│4│4│
│9│6│
└─┴─┘

甚至

┌───┐
│1 2│
├───┤
│4 4│
├───┤
│9 6│
└───┘

这个怎么做?我将衷心感谢您的帮助。

4

2 回答 2

1

您需要在附加模式 ( )中唤起一个动名词。:0

a =: 1 2 3
*:`+: (`:0) a
1 4 9
2 4 6

如果您需要将它们装箱,只需;/它们:

;/*:`+: (`:0) a
┌─────┬─────┐
│1 4 9│2 4 6│
└─────┴─────┘
;/ |:  *:`+: (`:0) a      NB. different axis
┌───┬───┬───┐
│1 2│4 4│9 6│
└───┴───┴───┘
 _3 <\6 1 $,*:`+: (`:0) a   NB. yet another axis
┌─┬─┐
│1│2│
│4│4│
│9│6│
└─┴─┘
于 2013-07-20T20:28:48.893 回答
1

如果您想要垂直(面向列)输出,您应该首先将您的列表转换为垂直(面向列)格式:

    ,.1 2 3
 1
 2
 3

现在,您可以应用任意数量的计算。如果要将每个输出放在一个单独的框中,可以使用 ; 将它们链接在一起。在叉子里:

    (*: ; 2&*) ,. 1 2 3

两个注意事项:

  • 在 J 中,当所有数据的类型和形状都相同时,使用框是不寻常且不必要的。在您的情况下,您的操作都是标量和数字的,因此两个动词都会产生 1x3 列的数字。将它们组合起来,.产生一个 2x3 的数字表比;产生 2 个不透明的盒子更典型和惯用。

  • "Double" 在 J 中已经是一个原语,所以2&*我们可以说,而不是+:(*: ; +:) ,. 1 2 3

于 2013-07-20T22:36:59.203 回答