#haskell #repa
#haskell #repa
Вопрос:
В пакете Repa есть трафареты, которые позволяют вычислять значения из соседних значений удобным способом (полезно для свертки, размытия изображения, моделирования диффузии и т. Д.).
В текущем пакете Repa я могу создавать трафареты любой формы, но с помощью можно наносить только двумерные трафареты mapStencil2
. Есть ли способ применить трафареты к массивам с другим размером? Нет даже способа применить одномерные трафареты. Я ищу способ применения трехмерных трафаретов.
Спасибо
Комментарии:
1. Я полагаю
mapStencil2
, что это должно быть обобщено на более высокое фиксированное измерение, но я не уверен, что это значит для типа magictype PC5 = P C (P (S D) (P (S D) (P (S D) (P (S D) X))))
… 🙂2. Да, я тоже видел этот тип. Понятия не имею, как это разобрать. Если бы была доступна версия для одномерности, возможно, это было бы понятнее. Исходный код для
mapStencil2
меня также немного туповат.3.
mapStencil2
Функция repa гипероптимизирована, но работает только для небольших трафаретов. Смотрите, например , convolveP для более простой реализации (но все еще только 2D). Если вам нужны такие функции для общего n-мерного (или даже 3D) случая, вам, вероятно, придется написать их самостоятельно.4. Хорошо, это немного неудобно. Забавно иметь общие трафареты в пакете, не имея возможности их использовать. Вероятно ли, что в прошлом у Repa была общая
mapStencil
функция, и она была удалена? Может быть, я смогу создать новую функцию на основе этого.