Как мне применить трафареты Repa с произвольным размером?

#haskell #repa

#haskell #repa

Вопрос:

В пакете Repa есть трафареты, которые позволяют вычислять значения из соседних значений удобным способом (полезно для свертки, размытия изображения, моделирования диффузии и т. Д.).

В текущем пакете Repa я могу создавать трафареты любой формы, но с помощью можно наносить только двумерные трафареты mapStencil2 . Есть ли способ применить трафареты к массивам с другим размером? Нет даже способа применить одномерные трафареты. Я ищу способ применения трехмерных трафаретов.

Спасибо

Комментарии:

1. Я полагаю mapStencil2 , что это должно быть обобщено на более высокое фиксированное измерение, но я не уверен, что это значит для типа magic type 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 функция, и она была удалена? Может быть, я смогу создать новую функцию на основе этого.