Примените поэлементную математическую функцию, используя 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)))
Другие вопросы по тегам