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

14 vues (au cours des 30 derniers jours)
mi
mi le 18 Jan 2023
Commenté : Atsushi Ueno le 19 Jan 2023
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回
良い解決策をお持ちの方、ご意見をお聞かせいただけると幸いです。

Réponse acceptée

Atsushi Ueno
Atsushi Ueno le 18 Jan 2023
Modifié(e) : Atsushi Ueno le 19 Jan 2023
>良い解決策をお持ちの方、ご意見をお聞かせいただけると幸いです
行ごとの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 commentaires
Atsushi Ueno
Atsushi Ueno le 19 Jan 2023
すいません私の要件解釈違いでした。回答の方を修正しました。またビット数が複数回出現したので即値(悪習慣)⇒変数(良習慣)に置き換えました。
必要なのは「行ごとの0,1パターンが、この配列で何回出現しているかカウント」する事でしたね。言い訳すると、初めはビット数を少なくして、各データ(10000個全て)がパターン数と同一に設定したビン数のそれぞれに入ったかを表示して確認していました。
Atsushi Ueno
Atsushi Ueno le 19 Jan 2023
もう一つバグがありました。気付かれない様にしれっと直しました。
【誤】
disp([dec2bin(bin(k)) 'が' num2str(N(bin(k))) '回']);
【正】
disp([dec2bin(bin(k-1)) 'が' num2str(N(bin(k))) '回']);

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!