次元が 4x4 の行列 A があるとします。
ここで、この行列を係数 2 でダウンサンプリングして、次元 2x2 の新しい行列 B を取得します。
次の方法でダウンサンプリングしたい:
A とする
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
Bになりたい
3.5000 11.5000
5.5000 13.5000
B(1,1) を取得するには = 平均 (1, 5, 2 および 6) を取ります
B(1,2) を取得するには = 平均を取る (9, 13, 10 および 14)
B(2,1) = を取得するには、平均 (3、7、4、8) などを取ります。
したがって、B のすべての要素について、A から対応する 2x2 ブロックを取得し、その平均を取得します。
私の場合、行列 A は大きな次元です。また、ダウンサンプリング係数は任意に設定できます。
たとえば、A =
1 7 13 19 25 31
2 8 14 20 26 32
3 9 15 21 27 33
4 10 16 22 28 34
5 11 17 23 29 35
6 12 18 24 30 36
サイズ 3/2 のダウンサンプリング用。
行列 B のサイズは 4x4 になります。
B ユニットごとに、重複しない 1.5x1.5 ブロックの A を取得する必要があります。
例えば、
B(1,1) = 平均(1, 0.5x7, 0.5x2, 0.5x8)
B(2,1) = 平均(0.5x2, 0.5x8, 3, 9)
B(3,1) = 平均(4, 0.5x10, 0.5x5, 0.5x11)
B(4,1) = 平均(0.5x5, 0.5x11, 6, 12)
等々。
forループなしでこれを行うより速い方法はありますか?