我确实明白,它基本上是通过加法减少了乘法运算,但有什么神奇之处,它既适用于向量又适用于矩阵。
对于矢量,我们可以做类似 +/ A x B
的事情相反,结果相同。但这不适用于矩阵,因为 x
只会做一个2 2
矩阵,减少它会导致 2
矢量。
按照书本进行矩阵乘法,减少每个对应的 pow 和 column 乘法,将得到 2 2
对向量执行相同操作时的矩阵。
那么它是如何工作的呢?
最佳答案
内积可以定义为:
A f.g B ←→ f/¨ (⊂[¯1+⍴⍴A]A) ∘.g ⊂[0]B
即:将 A
沿其最后一个轴切割成切片,将 B
沿其第一个轴切割成切片,然后将 A
中的每个切片组合起来code> 使用 g
从 B
的每个切片,最后使用 f
执行归约。
如果A
和B
是矩阵,切片将是A
的行和B
的列>:
┌───┐ ┌───┐
│0 1│ │4 5│
│ │ +.× │ │
│2 3│ │6 7│
└───┘ └───┘
┌───┐ ┌─┬─┐
│0 1│ │4│5│
+/¨ ├───┤ ∘.× │ │ │
│2 3│ │6│7│
└───┘ └─┴─┘
┌─────────┬─────────┐
│0 1 × 4 6│0 1 × 5 7│
+/¨ ├─────────┼─────────┤
│2 3 × 4 6│2 3 × 5 7│
└─────────┴─────────┘
┌────────────┬────────────┐
│+/ 0 1 × 4 6│+/ 0 1 × 5 7│
├────────────┼────────────┤
│+/ 2 3 × 4 6│+/ 2 3 × 5 7│
└────────────┴────────────┘
┌─────┐
│ 6 7│
│ │
│26 31│
└─────┘
如果 A
和 B
是向量,那么切片将是 A
和 B
本身,而你得到
A +.× B ←→ +/ A×B ⍝ if A and B are vectors
在任何情况下,要使内积起作用,A
的最后一个轴的长度需要与 B
的第一个轴的长度相匹配。
关于apl - 为什么 APL 中的 +.x 同时适用于矩阵和向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20424228/