apl - 为什么 APL 中的 +.x 同时适用于矩阵和向量?

标签 apl inner-product

我确实明白,它基本上是通过加法减少了乘法运算,但有什么神奇之处,它既适用于向量又适用于矩阵。

对于矢量,我们可以做类似 +/ 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> 使用 gB 的每个切片,最后使用 f 执行归约。

如果AB 是矩阵,切片将是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│
└─────┘

如果 AB 是向量,那么切片将是 AB 本身,而你得到

A +.× B   ←→   +/ A×B        ⍝ if A and B are vectors

在任何情况下,要使内积起作用,A 的最后一个轴的长度需要与 B 的第一个轴的长度相匹配。

关于apl - 为什么 APL 中的 +.x 同时适用于矩阵和向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20424228/

相关文章:

version-control - 原始函数序列的 Dyalog SALT.Load 异常 "could not fix"

save - 我不能在 GNU apl 中保存

scripting - 在 APL 中声明多行函数的问题

Java vector 内积

Python 矩阵内积

python - Tensorflow 高效成对内积

python - Gekko 数组与 Numpy 数组的内积

apl - 有哪些好的资源可以帮助您入门/学习 APL?