Со страницы справки Dyalog на "Внутреннем продукте" :
R←X f.g Y
Результат производной функции имеет форму (¯1↓⍴X),1↓⍴Y
; каждый элемент равен f/x g¨y
, где x
и y
- векторы, взятые из всех комбинаций векторов вдоль последней оси X
и первой оси Y
.
In в случае vector f.g vector
, это хорошо понимать как f/ vector g¨ vector
, как вы уже заметили. Однако для матриц и многомерных массивов это становится более сложным.
Для матриц наиболее простым (и наиболее цитируемым) использованием является «матричный продукт» +.×
. Математически, для матрицы X размером n × n и матрицы Y размером n × p, X +.× Y
определяется как матрица размером m × p, элемент которой в [i;j]
является векторным точечным произведением (сумма поэлементных значений). продукты) из i
-й строки X и j
-го столбца Y. Для иллюстрации см. страницу Википедии .
В этом случае массив X ( матрица m-by-n) имеет форму (⍴
) m n
, а Y имеет форму n p
. Результат имеет форму m p
, которая равна (¯1↓m n),1↓n p
.
Если мы обобщим это определение на произвольные функции f
и g
, (для матриц X и Y) мы можем определить X f.g Y
быть другой матрицей, элементами которой являются «уменьшение на f» «поэлементных g» каждой строки X и каждого столбца Y. Это именно то, о чем говорит do c, когда упоминает f/x g¨ y
, Кроме того, X имеет m строк, а Y имеет p столбцов, поэтому при расчете всех комбинаций каждой строки X и каждого столбца Y будет дано точно m×p
значений.
Пока что мы Вы рассмотрели более половины предложения do c. Тогда что означает «векторы вдоль последней оси X
»? Для матрицы X формы m n
последняя ось имеет длину n
, поэтому матрицу X можно рассматривать как m
векторов длины n
. Аналогично, «векторы вдоль первой оси Y
» означают просмотр формы n p
матрицы Y как p
векторов длины n
. Тогда два вектора длины - n
(один из X, а другой из Y) становятся аргументами g¨
, что означает, что длины должны совпадать.
Мы также можем обобщить эту концепцию на более высокие размерные массивы. Если у нас есть a×b×c
массив X, он имеет a×b
векторов длины c
(последняя ось). Если у нас есть другой c×d×e
массив Y, он имеет d×e
векторов длины c
(первая ось). Тогда вычисление по всем комбинациям векторов даст a×b×d×e
элементов, что, естественно, даст массив результатов формы a b d e
.
Суммируя все это, X f.g Y
эквивалентно извлечению векторов последней оси X и векторы первой оси Y и вычисление внешнего произведения из f/ x g¨ y
по векторам:
a ← 2 3 3⍴⍳4
b ← 3 3 4⍴⍳5
f ← {⍺+⊂⍵}
g ← {⍺⍵}
⎕←(a f.g b) ≡ (↓[≢⍴a]a) ∘.{⊃ f/ ⍺ g¨ ⍵} (↓[1]b)
Эта программа выводит 1, то есть значение true. Попробуйте онлайн!