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

6 visualizzazioni (ultimi 30 giorni)
mi
mi il 19 Gen 2023
Modificato: Atsushi Ueno il 19 Gen 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 Commento
Atsushi Ueno
Atsushi Ueno il 19 Gen 2023
出力イメージの数字が離れて表示されているので、
dataのサイズは(2^ビット数) x (ビット数+1(出現回数格納分)) (転置すると逆)と解釈しました。
つまり data は「0と1のパターンを羅列した行列」に出現回数格納分を1行(転置状態では1列)追加した
ところが提示されたプログラムだと1*10000(元のデータ数)になっています。
2進数のビットパターン(文字列)を str2double 関数で数値にすると10進数の大きな値になってしまい、具合がよろしくないのでその様な要件ではないと解釈しています。

Accedi per commentare.

Risposta accettata

Atsushi Ueno
Atsushi Ueno il 19 Gen 2023
Modificato: Atsushi Ueno il 19 Gen 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

Più risposte (0)

Categorie

Scopri di più su データ型の変換 in Help Center e File Exchange

Prodotti


Release

R2022b

Community Treasure Hunt

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

Start Hunting!