Jump to content

Matrix multiplication: Difference between revisions

→‎With List and without transpose: Applied hlint and hindent
(→‎With List and without transpose: Applied hlint and hindent)
Line 2,232:
l = [((i,j), sum [x!(i,k) * y!(k,j) | k <- kr]) | i <- ir, j <- jr]</lang>
===With List and without transpose===
<lang Haskell>multiply :: Num a => [[a]] -> [[a]] -> [[a]]
multiply:: Num a => [[a]] -> [[a]] -> [[a]]
multiply us vs = map (mult [] vs) us
where
mult xs [] _ = xs
mult xs _ [] = xs
mult [] (zs:zss) (y:ys) = mult (map (\vy -> v*y) zs) zss ys
mult xs (zs:zss) (y:ys) = mult (zipWith (\u v -> u + v * y) xs zs) zss ys
 
main :: IO ()
main = mapM_ print $ multiply [[1, 2], [3, 4]] [[-3, -8, 3], [-2, 1, 4]]</lang>
</lang>
{{out}}
<pre>[-7,-6,11]
[-717,-620,1125]</pre>
 
[-17,-20,25]
</pre>
===With List and without transpose - shorter===
<lang Haskell>mult :: Num a => [[a]] -> [[a]] -> [[a]]
9,659

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.