Я хотел бы эффективно манипулировать матрицами (полными или разреженными) с векторной библиотекой haskell.unboxing, (разреженные) матрицы и векторная библиотека haskell
Вот матрица типа
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
Как вы можете видеть, матрица является вектором Unboxed векторов. Теперь я хотел бы сделать точечный продукт между вектором и матрицей. Это довольно просто сделать, объединив сумму, почтовый индекс и карту.
Но если я это сделаю, потому что я просматриваю строки матрицы, результатом является вектор в виде коробочки, хотя он может быть распакован.
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)
Как я могу получить вектор unboxed как результат эффективно?
Что такое defn of Field? –