我确实理解,它基本上是通过加法减少乘法,但是有什么魔力,使它既适用于向量又适用于矩阵。
对于向量,我们可以做类似+/ A x B
的事情,但结果相同。但这不适用于矩阵,x
就像制作一个2 2
矩阵一样,减少它会产生2
向量。
并且按本书进行矩阵乘法,减少每个相应的 pow 和列乘法,在2 2
对向量执行相同操作时会产生矩阵。
那么它是如何工作的呢?
我确实理解,它基本上是通过加法减少乘法,但是有什么魔力,使它既适用于向量又适用于矩阵。
对于向量,我们可以做类似+/ A x B
的事情,但结果相同。但这不适用于矩阵,x
就像制作一个2 2
矩阵一样,减少它会产生2
向量。
并且按本书进行矩阵乘法,减少每个相应的 pow 和列乘法,在2 2
对向量执行相同操作时会产生矩阵。
那么它是如何工作的呢?
内积可以定义为:
A f.g B ←→ f/¨ (⊂[¯1+⍴⍴A]A) ∘.g ⊂[0]B
即:A
沿其最后一个轴切割成切片,沿其第一个轴执行相同操作B
,然后将每个切片 fromA
与使用 的每个切片B
组合g
,最后使用 执行归约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
。
对于内积,不管它是什么,要在两个矩阵上工作,左边参数的最后一个维度必须匹配右边的第一个维度。
因此,形状为 5 2 3 2 的矩阵左参数将与形状为 2 3 9 的矩阵右参数一起使用。3 2 与 2 3 匹配。结果的形状将是没有最后一个元素的左参数的形状与没有第一个元素的右参数的形状相连接,在本例中为 5 2 3 3 9。
在向量参数的情况下,内部一维就可以了。
(1 3 p 1 2 3) +.x 3 1 p 1 2 3 (matrices match)
14
1 2 3 +.x 3 1 p 1 2 3
14
(1 3 p 1 2 3) +.x 1 2 3
14
1 2 3 +.x 1 2 3
14