对于“i”,在J中强制使用数组而不是矩阵。
i.
原语生成一个整数列表:
i. 10
0 1 2 3 4 5 6 7 8 9
如果我想连续生成几个短列表,我会这样做:(
;i."0 each [ 2 3 4
0 1 0 1 2 0 1 2 3
我想要的结果)
装箱(each
) 在这里是一个拐杖,因为没有它, i."0
会产生一个矩阵。
i."0 [ 2 3 4
0 1 0 0
0 1 2 0
0 1 2 3
(我不想要的结果)
有没有更好的方法来没有 i."0< /code> 将输出格式化为矩阵,但是数组?
The i.
primitive produces a list of integers:
i. 10
0 1 2 3 4 5 6 7 8 9
If I want to produce several short lists in a row, I do this:
;i."0 each [ 2 3 4
0 1 0 1 2 0 1 2 3
(the result I want)
Boxing (that each
) is a crutch here, because without it, i."0
produces a matrix.
i."0 [ 2 3 4
0 1 0 0
0 1 2 0
0 1 2 3
(the result I don't want)
Is there a better way to not have i."0
format the output to a matrix, but an array?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不,我相信您无法做得比当前的解决方案更好。
i."0
无法返回向量。"0
副词强制i.
接受标量,并且i.
返回向量。i.
无法知道您的输入是向量而不是标量。根据 J 底漆,结果形状是参数框架和结果。到目前为止,我发现的最短的“无框”解决方案
仍然比仅使用
;i 更长。每个 2 3 4
No, I believe you can't do any better than your current solution. There is no way for
i."0
to return a vector.The
"0
adverb forcesi.
to accept scalars, andi.
returns vectors.i.
has no way of knowing that your input was a vector rather than a scalar. According to The J primer the result shape is the concatenation of the frame of the argument and the result.The shortest "box-less" solution I've found so far is
which is still longer than just using
;i. each 2 3 4