Je voudrais manipuler les matrices (complètes ou éparses) efficacement avec la bibliothèque vectorielle de haskell.déballage, matrices (clairsemées) et bibliothèque de vecteurs haskell
est ici un type de matrice
import qualified Data.Vector.Unboxed as U
import qualified Data.Vector as V
data Link a = Full (V.Vector (U.Vector a))
| Sparse (V.Vector (U.Vector (Int,a)))
type Vector a = U.Vector a
Comme vous pouvez le voir, la matrice est un vecteur de vecteurs unboxed. Maintenant, je voudrais faire un produit scalaire entre un vecteur et une matrice. C'est assez simple à faire en combinant une somme, un zip et une carte. Mais si je fais cela, parce que je suis en train de cartographier les lignes de la matrice, le résultat est un vecteur encadré, même s'il peut être décompacté.
propagateS output (Field src) (Full weights) = V.map (sum out) weights
where out = U.map output src
sum s w = U.sum $ zipWithFull (*) w s
propagateS output (Field src) (Sparse weights) = V.map (sum out) weights
where out = U.map output src
sum s w = U.sum $ zipWithSparse (*) w s
zipWithFull = U.zipWith
zipWithSparse f x y = U.map f' x
where f' (i,v) = f v (y U.! i)
Comment puis-je obtenir un vecteur non-box efficacement?
quel est le defn de Field? –