バイナリパターンの出現回数を行列に格納する
2 views (last 30 days)
Show older comments
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
on 19 Jan 2023
出力イメージの数字が離れて表示されているので、
dataのサイズは(2^ビット数) x (ビット数+1(出現回数格納分)) (転置すると逆)と解釈しました。
つまり data は「0と1のパターンを羅列した行列」に出現回数格納分を1行(転置状態では1列)追加した
ところが提示されたプログラムだと1*10000(元のデータ数)になっています。
Accepted Answer
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
data
0 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!