Примените поэлементную математическую функцию, используя hmatrix (с векторизацией)
Мне нужно эффективно применить функцию к элементам вектора в Haskell, что подразумевает, что я не ищу что-то вроде этого:
sigmoid :: [Float] -> [Float]
sigmoid [] = []
sigmoid (z:zs) = ( 1/(1+exp (-z)) ):(sigmoid zs)
Чтобы быть более конкретным, есть ли exp, log, ... etc
для поэлементных векторных операций в hmatrix с использованием Haskell, аналогично их аналогам в numpy с использованием Python? Мой код работает очень медленно, если я не использую возможности векторной обработки.
1 ответ
Решение
Если вы используете Hmatrix, вы, вероятно, ищетеcmap
:
cmap :: (Element b, Container c e) => (e -> b) -> c e -> c b
лайк
fmap
(не может реализовать экземпляр Functor из-за ограничения класса Element)
sigmoid :: Vector Double -> Vector Double
sigmoid = cmap (\z -> 1/(1+exp (-z)))