trusted
83
edits
(Alternate model for inner versus outer product) |
No edit summary Tags: Mobile edit Mobile web edit |
||
Line 1: | Line 1: | ||
The Falkoff/Iverson quote, while providing illuminating historical context, is a bit misleading—the reduction in inner product does not collapse any axes relative to the result shape, as it is applied only within each enclosure/box of the outer product. Rather, in <syntaxhighlight lang=apl inline>f/¨ (⊂[⍴⍴x]x)∘.g ⊂[1]y</syntaxhighlight> the enclosure of one axis of each argument, prior to the outer product operation, is responsible for the collapsing of dimensions. | The Falkoff/Iverson quote, while providing illuminating historical context, is a bit misleading—the reduction in inner product does not collapse any axes relative to the result shape, as it is applied only within each enclosure/box of the outer product. Rather, in <syntaxhighlight lang=apl inline>f/¨ (⊂[⍴⍴x]x)∘.g ⊂[1]y</syntaxhighlight> the enclosure of one axis of each argument, prior to the outer product operation, is responsible for the collapsing of dimensions. | ||
Equivalently from a slightly different angle, if we use the model <syntaxhighlight lang=apl inline>X⊂⍤(f/)⍤g⍤1⍤1 99⊢Y⍉⍨¯1⌽⍳≢⍴Y</syntaxhighlight>, the collapsing of dimensions is due more generally to <syntaxhighlight lang=apl inline>⊂⍤…⍤g⍤1</syntaxhighlight> mapping two vectors to a scalar. Clearly the same holds for <syntaxhighlight lang=apl inline> | Equivalently from a slightly different angle, if we use the model <syntaxhighlight lang=apl inline>X⊂⍤(f/)⍤g⍤1⍤1 99⊢Y⍉⍨¯1⌽⍳≢⍴Y</syntaxhighlight>, the collapsing of dimensions is due more generally to <syntaxhighlight lang=apl inline>⊂⍤…⍤g⍤1</syntaxhighlight> mapping two vectors to a scalar. Clearly the same holds for <syntaxhighlight lang=apl inline>⊂⍤g⍤1</syntaxhighlight>, i.e., the same expression with the reduction removed. | ||
[[User:⊂⍺m|⊂⍺m]] ([[User talk:⊂⍺m|talk]]) 22:45, 25 June 2023 (UTC) ⊂⍺m | [[User:⊂⍺m|⊂⍺m]] ([[User talk:⊂⍺m|talk]]) 22:45, 25 June 2023 (UTC) ⊂⍺m | ||
:Iverson's model may have been more like <syntaxhighlight lang=apl inline>f⌿⍤(1-≢⍴X)⊢ X g⍤¯1⍤1 99⊢ Y</syntaxhighlight>, so that the flat intermediate result does have this extra axis. Maybe with a transpose like your second example, who knows. In a nested APL, <syntaxhighlight lang=apl inline>g¨</syntaxhighlight> should be used instead of <syntaxhighlight lang=apl inline>g</syntaxhighlight>, but I think with this modification it correctly describes the semantics other than maybe evaluation order. I would say even in your examples there is an extra axis, but it's hidden away by a layer of nesting; forcing everything to be flat makes it literally an array axis at some point. --[[User:Marshall|Marshall]] ([[User talk:Marshall|talk]]) 01:05, 26 June 2023 (UTC) | :Iverson's model may have been more like <syntaxhighlight lang=apl inline>f⌿⍤(1-≢⍴X)⊢ X g⍤¯1⍤1 99⊢ Y</syntaxhighlight>, so that the flat intermediate result does have this extra axis. Maybe with a transpose like your second example, who knows. In a nested APL, <syntaxhighlight lang=apl inline>g¨</syntaxhighlight> should be used instead of <syntaxhighlight lang=apl inline>g</syntaxhighlight>, but I think with this modification it correctly describes the semantics other than maybe evaluation order. I would say even in your examples there is an extra axis, but it's hidden away by a layer of nesting; forcing everything to be flat makes it literally an array axis at some point. --[[User:Marshall|Marshall]] ([[User talk:Marshall|talk]]) 01:05, 26 June 2023 (UTC) | ||
:You’re right, he may have described it in some different way conceptually—after all, the notation for it preceded any implementation. I was trying to save other APL novices the bit of confusion this had caused me, but upon reflection, the description is pretty vague anyway. | |||
[[User:⊂⍺m|⊂⍺m]] ([[User talk:⊂⍺m|talk]]) 03:28, 26 June 2023 (UTC) ⊂⍺m |