配列内における特定の​行(または列)の出現​回数を求める

12 ビュー (過去 30 日間)
mi
mi 2023 年 1 月 18 日
コメント済み: Atsushi Ueno 2023 年 1 月 19 日
0,1が19×10000格納されているデータがあります。
0 0 0
1 1 1
1 1 1
1 1 0
1 1 1
1 1 1
1 1 1
0 0 0
0 0 0  …
0 0 0
0 0 0
1 1 1
0 0 0
0 0 0
1 1 1
1 1 1
1 1 1
0 0 0
行ごとの0,1パターンが、この配列で何回出現しているかカウントしたいです。
上記の例
[0 1 1 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0] が2回
[0 1 1 0 1 1 1 0 0 0 0 1 0 0 1 1 1 0] が1回
良い解決策をお持ちの方、ご意見をお聞かせいただけると幸いです。

採用された回答

Atsushi Ueno
Atsushi Ueno 2023 年 1 月 18 日
編集済み: Atsushi Ueno 2023 年 1 月 19 日
>良い解決策をお持ちの方、ご意見をお聞かせいただけると幸いです
行ごとの0,1パターンを10進数に変換し一つの値として捉えるのはどうでしょうか?
そうすれば、histcounts関数を使って各値の出現回数をカウントする事ができます。
bits = 19; % 20230109追記:ビット数を即値⇒変数化
dat = randi(2,[bits,10000]) - 1; % 0,1が19×10000格納されているデータ
dec = bin2dec(num2str(dat')); % 19桁の2進数とみなし、一旦10進数に変換する
N = histcounts(dec,2^bits); % histcounts関数で各パターンの出現回数をカウントする
%for k = 1:numel(bin) % 要件違いの為削除
% disp([dec2bin(bin(k-1)) 'が' num2str(N(bin(k))) '回']);
%end
for k = 1:2^bits % histcountのビン数だけ表示する
disp([dec2bin(k-1) 'が' num2str(N(k)) '回']);
end
  4 件のコメント
Atsushi Ueno
Atsushi Ueno 2023 年 1 月 19 日
すいません私の要件解釈違いでした。回答の方を修正しました。またビット数が複数回出現したので即値(悪習慣)⇒変数(良習慣)に置き換えました。
必要なのは「行ごとの0,1パターンが、この配列で何回出現しているかカウント」する事でしたね。言い訳すると、初めはビット数を少なくして、各データ(10000個全て)がパターン数と同一に設定したビン数のそれぞれに入ったかを表示して確認していました。
Atsushi Ueno
Atsushi Ueno 2023 年 1 月 19 日
もう一つバグがありました。気付かれない様にしれっと直しました。
【誤】
disp([dec2bin(bin(k)) 'が' num2str(N(bin(k))) '回']);
【正】
disp([dec2bin(bin(k-1)) 'が' num2str(N(bin(k))) '回']);

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

その他の回答 (0 件)

カテゴリ

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

タグ

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!