一つの行をグループ分けすることはできますか?
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
KO
am 11 Mai 2021
Bearbeitet: Atsushi Ueno
am 12 Mai 2021
ある1×1行のlogical配列,例えば
000111110011110001111
を0,1で振り分けて以下のように1×6セル配列などにグループ分けすることはできますか?
{000}{11111}{00}{1111}{000}{1111}
0 Kommentare
Akzeptierte Antwort
Atsushi Ueno
am 12 Mai 2021
Bearbeitet: Atsushi Ueno
am 12 Mai 2021
こんなんでどうでしょう
a = logical([0 0 0 1 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 1]);
idx = find([diff(a) numel(a)]); %境目のインデックス
width = diff([0 idx]); %各要素グループのサイズ(幅)
b = mat2cell(a, 1, width); %1行width列に分割し1×6セル配列に束ねる
a = 1×21 の logical 配列
0 0 0 1 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 1
idx = 3 8 10 14 17 21
width = 3 5 2 4 3 4
b = 1×6 の cell 配列
[1×3 logical] [1×5 logical] [1×2 logical] [1×4 logical] [1×3 logical] [1×4 logical]
0 Kommentare
Weitere Antworten (1)
Kojiro Saito
am 12 Mai 2021
きれいなやり方ではなく、愚直にfor文を使った方法ですが、下記で実現できます。
resultにグループ分けされたセル配列が格納されます。
line = '000111110011110001111';
tmpStr = line(1);
count = 1;
idx = 1;
for n=2:length(line)
% n番目の文字と1つ前の文字を比較し、違ったらresultに文字を格納
if ~strcmp(line(n), tmpStr)
result{count} = line(idx:n-1);
count = count+1;
idx = n;
end
% nが最後の場合はresultに文字を格納
if n == length(line)
result{count} = line(idx:n);
end
% 次のループのために文字を保持
tmpStr = line(n);
end
0 Kommentare
Siehe auch
Kategorien
Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!