バイナリパターンの出現回数を行列に格納する

6 views (last 30 days)
mi
mi on 19 Jan 2023
Edited: Atsushi Ueno on 19 Jan 2023
0,1が19×10000格納されているdata9があります。
行ごとの0,1パターンがこの配列で何回出現しているかカウントした後、その結果をdispするだけでなくdataに格納したいです。
data10 = bin2dec(num2str(data9')); % binaryデータを19桁の2進数とみなし、一旦10進数に変換
[N,~,bin] = histcounts(data10,2^19); % 各パターンの出現回数をカウント
data=zeros(size(bin));
for k = 1:numel(bin)
disp([dec2bin(bin(k)) 'が' num2str(N(bin(k))) '回']);
data(k)=[str2double(dec2bin(bin(k))),num2str(N(bin(k)))]; % ここで上手くいかない。上記のdisp内容を行列データにしたい
end
出力イメージとしては、下記のように「binary data + 出現回数」としたいです。
(一例ですので転置状態でも構いません。)
1 0 1 0 1 1 1 0 0 0 1 1 1 0 1 0 1 1  42
1 0 1 0 1 1 1 0 0 0 1 1 1 0 1 0 1 1  12
1 0 1 0 1 1 1 0 0 0 1 1 1 0 1 0 1 1  13
1 0 1 0 1 1 1 0 0 0 1 1 1 0 1 0 1 1  34
1 0 1 0 1 0 1 0 0 0 1 1 1 0 1 0 1 1  9
詳細がわからない場合はコメントいただけるとありがたいです。
また、解決法をお持ちの方はご教授頂けると幸いです。
  1 Comment
Atsushi Ueno
Atsushi Ueno on 19 Jan 2023
出力イメージの数字が離れて表示されているので、
dataのサイズは(2^ビット数) x (ビット数+1(出現回数格納分)) (転置すると逆)と解釈しました。
つまり data は「0と1のパターンを羅列した行列」に出現回数格納分を1行(転置状態では1列)追加した
ところが提示されたプログラムだと1*10000(元のデータ数)になっています。
2進数のビットパターン(文字列)を str2double 関数で数値にすると10進数の大きな値になってしまい、具合がよろしくないのでその様な要件ではないと解釈しています。

Sign in to comment.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 19 Jan 2023
Edited: Atsushi Ueno on 19 Jan 2023
こういう事ですね。
histcounts 関数の出力の3番目 bin は、各データが何番目のビンに入ったかを示す情報なので不要でした。
bits = 2; % binaryデータを19桁(⇒表示の為2桁)の2進数とみなす
data9 = randi(2,[bits,10000]) - 1; % binaryデータのサンプル
data10 = bin2dec(num2str(data9')); % 一旦10進数に変換
N = histcounts(data10,2^bits); % 各パターンの出現回数をカウント
data = zeros(2^bits,bits+1);
for k = 1:2^bits % histcountのビン数だけ表示する
disp([dec2bin(k-1) 'が' num2str(N(k)) '回']);
data(k,:) = [dec2bin(k-1,bits)-'0', N(k)];
end
0が2521回 1が2495回 10が2521回 11が2463回
data
data = 4×3
0 0 2521 0 1 2495 1 0 2521 1 1 2463

More Answers (0)

Categories

Find more on データ型の変換 in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!