2次元配列における任意の座標からの積分値を求める方法を教えて下さい。
2 views (last 30 days)
Show older comments
例えば、以下2次元配列Y(3×5)において、任意の座標(例えばY(2,3)=8)に対する
各点までの積分値(3×5)を求める方法はありますか?
Y =[1 2 3 4 5;
6 7 8 9 10;
11 12 13 14 15;]
以上、宜しくお願いいたします。
0 Comments
Accepted Answer
Shunichi Kusano
on 23 Jan 2019
cumsum関数を利用する方法があるかと思います。
足しこんでいく方向をコントロールできますのでこれを利用して、出発点は(1,1),(1,end),(end,1),(end,end)から選ぶことができます。
行列の任意の位置を起点としたい場合は、1.その点で行列を4分割して, 2.それぞれでcumsumを適用し、3.結果をつなぎ合わせる、という手順になるかと思います。
Y = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15];
% Y(2,3)を含むよう4分割
Y11 = Y(1:2,1:3);
Y12 = Y(1:2,3:end);
Y21 = Y(2:end,1:3);
Y22 = Y(2:end,3:end);
% cumsumの計算
Y11_cumsum = cumsum(cumsum(Y11,1,'reverse'),2,'reverse');
Y12_cumsum = cumsum(cumsum(Y12,1,'reverse'),2,'forward');
Y21_cumsum = cumsum(cumsum(Y21,1,'forward'),2,'reverse');
Y22_cumsum = cumsum(cumsum(Y22,1,'forward'),2,'forward');
% つなぎ合わせる
Y_cumsum = zeros(size(Y));
Y_cumsum(1:2,1:3) = Y11_cumsum;
Y_cumsum(1:2,3:end) = Y12_cumsum;
Y_cumsum(2:end,1:3) = Y21_cumsum;
Y_cumsum(2:end,3:end) = Y22_cumsum;
0 Comments
More Answers (1)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!