在J
中,我有一个类似1 2 3
的列表,我想将*:
和2*
设为像
┌─┬─┐
│1│2│
│4│4│
│9│6│
└─┴─┘
甚至
┌───┐
│1 2│
├───┤
│4 4│
├───┤
│9 6│
└───┘
怎么做?我非常感谢你的帮助。
答案 0 :(得分:1)
您需要evoke a gerund追加模式(: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 :(得分:1)
如果您想要垂直(面向列)输出,则应首先将列表转换为垂直(面向列)格式:
,.1 2 3
1
2
3
现在您可以应用任意数量的计算。如果要将每个输出放在一个单独的框中,可以使用;在叉子里:
(*: ; 2&*) ,. 1 2 3
两个注释:
在J中,当所有数据的类型和形状相同时,使用框是不常见的,也是不必要的。在您的情况下,您的操作都是标量和数字,因此两个动词都会产生1x3的数字列。将它们与,.
组合以生成2x3数字表而不是;
以生成2个不透明框将更为典型和惯用。
“Double”已经是J中的原语,因此我们可以2&*
代替+:
而不是(*: ; +:) ,. 1 2 3