我想加入专栏
┌─┬─┬─┐
│1│1│2│
│2│4│4│
│3│9│6│
└─┴─┴─┘
我想把它a=.1 2 3
作为第四行,然后b=.1 1 1 1
作为第一列放到新的盒装数据中。我怎样才能轻松做到这一点?我是否必须解开整个事物并自己计算尺寸才能再次装箱?
另外,如果我希望数据i.8
为 2 行,是否必须计算另一个维度 4(=8/2) 才能形成矩阵2 4$i.8
?然后装箱呢;/2 4$i.8
?我可以只指定一个维度,行数或列数并要求自动装箱或形成矩阵吗?
我想加入专栏
┌─┬─┬─┐
│1│1│2│
│2│4│4│
│3│9│6│
└─┴─┴─┘
我想把它a=.1 2 3
作为第四行,然后b=.1 1 1 1
作为第一列放到新的盒装数据中。我怎样才能轻松做到这一点?我是否必须解开整个事物并自己计算尺寸才能再次装箱?
另外,如果我希望数据i.8
为 2 行,是否必须计算另一个维度 4(=8/2) 才能形成矩阵2 4$i.8
?然后装箱呢;/2 4$i.8
?我可以只指定一个维度,行数或列数并要求自动装箱或形成矩阵吗?
您的问题的答案将涉及了解 &。, 'Under' 连词,在 J.
m
┌─┬─┬─┐
│1│1│2│
│2│2│4│
│3│9│6│
└─┴─┴─┘
a=. 1 2 3
b=. 1 1 1 1
所以我们想将 a 的每个项目添加到 m 的每个盒装列中。如果我们可以使用 unbox(>) 将列拆箱,使用 append (,) 将 a 的项目附加到列,然后使用 box (<) 重新装箱,那将是完美的。这个撤销、操作、重做循环正是 Under (&.) 所做的。它使用右侧的动词撤消其左右参数( m 和 a ),然后将动词应用到其左侧,然后在结果上使用右侧的动词的反向。在实践中,
m , &. > a
┌─┬─┬─┐
│1│1│2│
│2│2│4│
│3│9│6│
│1│2│3│
└─┴─┴─┘
当 a 从未被装箱时,它被拆箱的事实意味着它没有被改变,而 m 在 (,) 应用于每个 a 之前被拆箱。事实上,这在 J that & 中经常使用。> 被命名为“每个”。
m , each a
┌─┬─┬─┐
│1│1│2│
│2│2│4│
│3│9│6│
│1│2│3│
└─┴─┴─┘
在 b 的盒装版本之前需要先给它一个额外的维度,用层压板 (,:) 然后转置 (|:) b 最后装箱 (<) 结果。添加额外维度的步骤是必需的,因为转置交换了索引,并且 b 从一维列表开始。
(<@|:@,:b)
┌─┐
│1│
│1│
│1│
│1│
└─┘
剩下的很简单,因为我们只需使用 append (,) 将盒装 b 与 (m, each a) 连接起来
(<@|:@,: b) , m , each a
┌─┬─┬─┬─┐
│1│1│1│2│
│1│2│2│4│
│1│3│9│6│
│1│1│2│3│
└─┴─┴─┴─┘
(<@|:@,: b) 周围的括号是强制执行正确顺序所必需的。
对于第二个问题,您可以使用 i。nm 创建一个 X m 数组,这可能会有所帮助。
i. 4 2
0 1
2 3
4 5
6 7
i. 2 4
0 1 2 3
4 5 6 7
但也许我在这里误解了你的意图。
希望这会有所帮助,鲍勃
,"x a
您可以简单地将 ( ,
)附加a
到未装箱的 ( >
) 输入中,但您必须小心附加等级。您想附加 的每个“项目” a
,因此您的排名正确为“0”。您想附加到一个2 单元格,因此您的左秩为“2”。因此,,
你需要有 rank "2 0
。追加后,您将数据重新装箱为 2 单元格<"2
。
<"2(>in)(,"2 0) a
┌─┬─┬─┐
│1│1│2│
│2│4│4│
│3│9│6│
│1│2│3│
└─┴─┴─┘
b,
如果你b
的形状正确,你可以在它前面加上b,
. 您似乎使用的形状是(盒装)4 1
:
b =: < 4 1$ 1
┌─┐
│1│
│1│
│1│
│1│
└─┘
b,in
┌─┬─┬─┬─┐
│1│1│1│2│
│1│2│4│4│
│1│3│9│6│
│1│1│2│3│
└─┴─┴─┴─┘