几年前,我在大型机上偷看了 APL2,并记得向我展示了将向量添加到矩阵的问题的解决方案。
给定a←4 4 ⍴ ⍳16
和⎕io←1
将向量添加到行的旧方法类似于
a+(⍴a)⍴10 20 30 40
导致
11 22 33 44
15 26 37 48
19 30 41 52
23 34 45 56
并将向量添加到矩阵的列是
a+(4 1⍴10 20 30 40)[;1 1 1 1]
或者,如果您愿意,
a+4/4 1⍴10 20 30 40
导致
11 12 13 14
25 26 27 28
39 40 41 42
53 54 55 56
幸运的是,我能够打电话给那天给我看 APL2 的那个人(他已经退休但仍然接听他的电话)并询问第二个解决方案,他立刻想起了我在说什么。
新的 APL2 方法更加简洁、简洁和一致,这些示例将通过a+[2] 10 20 30 40
and解决a+[1] 10 20 30 40
。凉爽的。它在 Dyalog 中工作。
快进十年或更长时间,我看到有一个叫做排名运算符的新东西。第一个例子可以解决a(+⍤1) 10 20 30 40
(我仍在努力掌握括号的用法,我想一旦我认为我理解了一点,我实际上再生了一些脑细胞)
尽管如此,没有直接的(至少对我而言)类似于a+[1] 10 20 30 40
使用秩运算符的第二个示例。我不能说我完全理解它,但在我看来,秩运算符通过折叠它的维度来“重新转换”它的左参数,同时保持内容完整。太多年的 C++ 和 Java 影响了我的思考方式。
a+[1] 10 20 30 40
有没有使用排名运算符的简单解决方案?到目前为止⍉(⍉a)(+⍤1) 10 20 30 40
,我发现的唯一想法是没有抓住重点并破坏了整个目的。
为什么秩运算符比轴符号更可取?哪个更好”?(可以肯定的是,这是一个加载的术语)乍一看,轴符号对我这个鞋码智商的人来说很容易掌握。对于等级运算符,我不能说同样的话。