Filter löschen
Filter löschen

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

9 Ansichten (letzte 30 Tage)
mi
mi am 18 Jan. 2023
Kommentiert: Atsushi Ueno am 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回
良い解決策をお持ちの方、ご意見をお聞かせいただけると幸いです。

Akzeptierte Antwort

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Logical finden Sie in Help Center und File Exchange

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!