我想专栏加入
┌─┬─┬─┐
│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从未被装箱时以a开头的事实被取消装箱的事实意味着它未被更改,而m在(,)应用于每个a之前被取消装箱。实际上,在J中经常用到&。>被命名为“每个”。
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,每个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
但也许我在这里误解了你的意图。
希望这会有所帮助,鲍勃
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句