バイナリパターンの出現回数を行列に格納する
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaire
Atsushi Ueno
le 19 Jan 2023
出力イメージの数字が離れて表示されているので、
dataのサイズは(2^ビット数) x (ビット数+1(出現回数格納分)) (転置すると逆)と解釈しました。
つまり data は「0と1のパターンを羅列した行列」に出現回数格納分を1行(転置状態では1列)追加した
ところが提示されたプログラムだと1*10000(元のデータ数)になっています。
Réponse acceptée
Atsushi Ueno
le 19 Jan 2023
Modifié(e) : Atsushi Ueno
le 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 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!