論理行列において、T​rueの個数を各列ご​とで数えたい

14 ビュー (過去 30 日間)
miya
miya 2022 年 11 月 7 日
コメント済み: miya 2022 年 11 月 7 日
■やりたいこと
論理行列でTrueの箇所を各列ごとにカウントしたい。
最終的には、列の数が親を表し、Trueの数が子を表すツリーを作成したい。
■やったこと & 質問
ひとまず、列ごとにTrueをカウントし、列の数を親、Trueの数を子とするツリーはできている。
しかし、For文が多くスマートさに欠けるので、もっと簡潔に書ける方法をご教授願いたい。
clc
A = [1 1 1 1; 1 1 0 1; 1 0 0 1]; % 入力
[row, col] = size(A); % 行、列 取得
cnt = zeros(1,col); % 列分 初期化
for c = 1:col % 1~最終列まで
for r = 1:row % 1~最終行まで
if A(r,c) == 1 % 1のとき
cnt(c) = cnt(c) + 1; % カウントアップ
end
end
end
for c = 1:col % 1~最終列まで
disp(append('Parent-',num2str(c))) % 親 表示
for r = 1:cnt(c) % 各列ごとにカウントした分まで
disp(append('└─ child-',num2str(r))) % 子 表示
end
end
Parent-1
└─ child-1 └─ child-2 └─ child-3
Parent-2
└─ child-1 └─ child-2
Parent-3
└─ child-1
Parent-4
└─ child-1 └─ child-2 └─ child-3

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 11 月 7 日
A = [1 1 1 1; 1 1 0 1; 1 0 0 1]; % 入力
cnt = sum(A,1); % Trueの箇所を各列ごとにカウント
for c = 1:size(A,2) % 1~最終列まで
disp(append('Parent-',num2str(c))) % 親 表示
for r = 1:cnt(c) % 各列ごとにカウントした分まで
disp(append('└─ child-',num2str(r))) % 子 表示
end
end
Parent-1
└─ child-1 └─ child-2 └─ child-3
Parent-2
└─ child-1 └─ child-2
Parent-3
└─ child-1
Parent-4
└─ child-1 └─ child-2 └─ child-3
  1 件のコメント
miya
miya 2022 年 11 月 7 日
早速の回答ありがとうございます。
sum関数でできますね…。言われてみればそうでした…。
解決したので、クローズします。

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!