>>> dot
(strat1 `dot` strat2) `dot` strat3 == strat1 `dot` (strat2 `dot` strat3) strat1 `dot` strat1 = strat1 strat1 `dot` r0 == strat1
strat2 `dot` strat1 == strat2 . withStrategy strat1
>>> V2 1 2 `dot` V2 3 4 11
forVector2 number_ $ \xs ys -> Vector.dot xs ys == Matrix.multiply (Matrix.singleRow xs) (Matrix.singleColumn ys) ! ((),())
QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.dot (Vector.unit (shapeInt dim) i) (Vector.unit (shapeInt dim) j) == (fromIntegral (fromEnum (i==j)) :: Number_)
>>> pretty $ dot sum (*) m (transpose m) [[5,14], [14,50]]inner product
>>> pretty $ dot sum (*) v v 5matrix-vector multiplication Note that an Array with shape [3] is neither a row vector nor column vector.
>>> pretty $ dot sum (*) v (transpose m) [5,14]
>>> pretty $ dot sum (*) m v [5,14]
>>> pretty $ dot sum (*) m (transpose m) [[5,14], [14,50]]inner product
>>> pretty $ dot sum (*) v v 5matrix-vector multiplication Note that an Array with shape [3] is neither a row vector nor column vector.
>>> pretty $ dot sum (*) v (transpose m) [5,14]
>>> pretty $ dot sum (*) m v [5,14]