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

aka*_*nuk 3 apl inner-product

我明白,它基本上是通过添加减少乘法,但是什么是魔术,使它适用于矢量和矩阵.

对于矢量,我们可以做+/ A x B相同的结果.但这不适用于矩阵,x就像制作2 2矩阵一样,减少它会导致2矢量.

并且通过本书进行矩阵乘法,减少每个相应的pow和列乘法,在2 2对向量做同样的操作时会产生矩阵.

那么它如何运作呢?

ngn*_*ngn 6

内在产品可以定义为:

A f.g B   ??   f/¨ (?[¯1+??A]A) ?.g ?[0]B
Run Code Online (Sandbox Code Playgroud)

即:A沿着其最后一个轴切割成切片,沿着其第一个轴执行相同的B切片,然后将每个切片A与来自B使用的每个切片组合g,最后使用执行缩小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?
???????
Run Code Online (Sandbox Code Playgroud)

如果是AB矢量,那么切片将是AB他们自己,你得到

A +.× B   ??   +/ A×B        ? if A and B are vectors
Run Code Online (Sandbox Code Playgroud)

在任何情况下,要使内部产品工作,A最后一个轴需要匹配第一个轴的长度B.