6

几年前,我在大型机上偷看了 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 40and解决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,我发现的唯一想法是没有抓住重点并破坏了整个目的。

为什么秩运算符比轴符号更可取?哪个更好”?(可以肯定的是,这是一个加载的术语)乍一看,轴符号对我这个鞋码智商的人来说很容易掌握。对于等级运算符,我不能说同样的话。

4

3 回答 3

8
于 2017-10-27T08:40:55.143 回答
3
于 2017-10-30T14:16:05.950 回答
1

我相信,要将向量添加到矩阵中,您不应再使用秩运算符搜索更简单的解决方案。我想引入秩运算符是为了实现原始标量函数的行为,也适用于定义的函数。也就是说,如果你有一个定义的函数,比如说

∇Z←A ADD B
 Z←A + B
∇

然后

a ADD[1] 10 20 30 40

会失败并迫使您使用排名运算符。rank 运算符需要括号,因为它的语法有些可疑:

a +⍤1 10 20 30 40    ⍝ ???
a(+⍤1)10 20 30 40    ⍝ maybe this?
a(+⍤1 10) 20 30 40   ⍝ or maybe this?
a(+⍤1 10 20) 30 40   ⍝ or even this?

IBM 足够聪明,可以标准化等级运算符,但没有实现它(至少在我的 PC 演示版 APL2 中)。

于 2017-10-28T15:55:17.377 回答