フィルターのクリア

How to make a matrix from trace of the original matrix ?

3 ビュー (過去 30 日間)
Yamada Taro
Yamada Taro 2022 年 9 月 5 日
コメント済み: Yamada Taro 2022 年 9 月 6 日
When I have a square matrix A like the one in the picture, I want to create a matrix B which is the sum of the kth diagonal component to the right below itself, is there any easy way to write this?
Currently, I am calculating in the form of creating reduced matrices and getting the jth diagonal component of each reduced matrix, but I feel it is quite slow and inefficient.
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

採用された回答

Dyuman Joshi
Dyuman Joshi 2022 年 9 月 5 日
編集済み: Dyuman Joshi 2022 年 9 月 5 日
Building on your approach - Breaking the matrix into smaller matrices and assigning the diagonal sums to the corressponding elements.
y=spiral(3)
y = 3×3
7 8 9 6 1 2 5 4 3
mat=y;
for i=1:size(y,1)-1
for j=1:size(y,2)-1
mat(i,j)=sum(diag(y(i:end,j:end)));
end
end
mat
mat = 3×3
11 10 9 10 4 2 5 4 3
  1 件のコメント
Yamada Taro
Yamada Taro 2022 年 9 月 6 日
Thank you!
It seems to work well and more sofisticated than my code.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOperating on Diagonal Matrices についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by