配列内における特定の行(または列)の出現回数を求める
9 次查看(过去 30 天)
显示 更早的评论
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回
良い解決策をお持ちの方、ご意見をお聞かせいただけると幸いです。
0 个评论
采纳的回答
Atsushi Ueno
2023-1-18
编辑:Atsushi Ueno
2023-1-19
>良い解決策をお持ちの方、ご意見をお聞かせいただけると幸いです
行ごとの0,1パターンを10進数に変換し一つの値として捉えるのはどうでしょうか?
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
2023-1-19
すいません私の要件解釈違いでした。回答の方を修正しました。またビット数が複数回出現したので即値(悪習慣)⇒変数(良習慣)に置き換えました。
必要なのは「行ごとの0,1パターンが、この配列で何回出現しているかカウント」する事でしたね。言い訳すると、初めはビット数を少なくして、各データ(10000個全て)がパターン数と同一に設定したビン数のそれぞれに入ったかを表示して確認していました。
Atsushi Ueno
2023-1-19
もう一つバグがありました。気付かれない様にしれっと直しました。
【誤】
disp([dec2bin(bin(k)) 'が' num2str(N(bin(k))) '回']);
【正】
disp([dec2bin(bin(k-1)) 'が' num2str(N(bin(k))) '回']);
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!