>>> 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]
>>> let b = fromFlatList [2,3] [1..6] :: Array Int >>> dot sum (*) b (transpose b) [[14, 32], [32, 77]]inner product
>>> let v = fromFlatList [3] [1..3] :: Array Int >>> dot sum (*) v v 14matrix-vector multiplication Note that an `Array Int` with shape [3] is neither a row vector nor column vector. dot is not turning the vector into a matrix and then using matrix multiplication.
>>> dot sum (*) v b [9, 12, 15]
>>> dot sum (*) b v [14, 32]