問題
既に存在する可能性のある repa ライブラリ内の関数を探しています。次のような関数が必要です。
- 2D 配列を取ります
- ウィンドウ サイズを指定する 2 つの整数
- 2D 配列の指定されたサイズの各ウィンドウで、新しい値 (この特定のウィンドウの小さな値など) を計算します。
例
min3x3 ウィンドウで関数をマッピング:
| | 1 2 3 4 3 4 5 6 7 2 7 8 9 4 2 5 4 8 1 6 8 5 3 3 2 |
戻ります:
| | 1 1 2 2 2 1 1 2 2 2 4 4 1 1 1 4 3 1 1 1 4 3 1 1 1 |
のBoundClamp コンストラクターに似たスキームを使用していることに注意してくださいData.Array.Repa.Stencil。これはステンシル畳み込みではありません。つまり、2D 配列のすべての要素にステンシルを適用しているわけではありません。代わりに、配列の各ウィンドウで関数を実行し、エッジの範囲外の要素には 2D 配列のエッジで最も近い値が割り当てられます。
可能な解決策の種類
関数は次のようになります。
mapF
:: Source r a
=> Boundary a -- ^ How to handle the boundary of the array.
-> (Int,Int) -- ^ window size in the X and Y direction.
-> (Array r DIM2 a -> b) -- ^ function over window e.g. to return the minimum value.
-> Array r DIM2 a -- ^ Array to apply function to.
-> Array r DIM2 b
これはすでに存在するものですか、それともコード化するのは簡単ですか?