在J
,我有一个类似的列表,1 2 3
我想把它做成一个盒子结构*:
2*
┌─┬─┐
│1│2│
│4│4│
│9│6│
└─┴─┘
甚至
┌───┐
│1 2│
├───┤
│4 4│
├───┤
│9 6│
└───┘
这个怎么做?我将衷心感谢您的帮助。
在J
,我有一个类似的列表,1 2 3
我想把它做成一个盒子结构*:
2*
┌─┬─┐
│1│2│
│4│4│
│9│6│
└─┴─┘
甚至
┌───┐
│1 2│
├───┤
│4 4│
├───┤
│9 6│
└───┘
这个怎么做?我将衷心感谢您的帮助。
您需要在附加模式 ( )中唤起一个动名词。: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│
└─┴─┘
如果您想要垂直(面向列)输出,您应该首先将您的列表转换为垂直(面向列)格式:
,.1 2 3
1
2
3
现在,您可以应用任意数量的计算。如果要将每个输出放在一个单独的框中,可以使用 ; 将它们链接在一起。在叉子里:
(*: ; 2&*) ,. 1 2 3
两个注意事项:
在 J 中,当所有数据的类型和形状都相同时,使用框是不寻常且不必要的。在您的情况下,您的操作都是标量和数字的,因此两个动词都会产生 1x3 列的数字。将它们组合起来,.
产生一个 2x3 的数字表比;
产生 2 个不透明的盒子更典型和惯用。
"Double" 在 J 中已经是一个原语,所以2&*
我们可以说,而不是+:
,(*: ; +:) ,. 1 2 3