各対角番号に対する対角和からなる配列
이전 댓글 표시
写真のような正方行列Aを持っている際に、自身より右下の第k対角成分の和をとった行列Bを作成したいのですが、何か簡単に書く方法はないでしょうか。

現在は縮小行列を作り、各縮小行列の第j番目の対角成分を取得する形で計算していますが、かなり遅いし効率も悪いなと感じています。
A = reshape(1:9,3,3);
B = zeros(3,3);
for i = 1:3
A_partial = A(i:end,i:end);
for j = 1:3-i+1
B(i,i+j-1) = sum(diag(A_partial,j-1));
B(i+j-1,i) = sum(diag(A_partial,-1*(j-1)));
end
end
A
B
댓글 수: 2
Atsushi Ueno
2022년 10월 3일
メモ:同じ主旨の問題がCodyに登録されました。逆の対角方向を選択するオプションも求められます。これを解くと他のCody参加者の回答を閲覧する事が出来ます。突飛なアイデアを持つ回答者が沢山いますよ。
Yamada Taro
2022년 10월 3일
채택된 답변
추가 답변 (1개)
clc,clear;
A = reshape(1:9,3,3);
B = zeros(size(A));
キモとなる関数です
f = @(X,x) diag(flip(cumsum(flip(diag(X,x)))),x);
上記の関数を - (行番号 - 1) ~ 列番号 - 1 分行います
-1としているのは角っこは計算する必要がないからです。
時間も計測してみましょうかね
tic
for ii = -height(A)+1:width(A)-1
B = B + f(A,ii);
end
toc
確認してみましょう
B
카테고리
도움말 센터 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!