Matlab の「データ」変数の繰り返し要素を組み合わせるのに問題があります。unique と sort を使用して値を簡単に組み合わせることができます。
[sorted,idx] = sort(data);
[~,ij] = unique(sorted,'first');
Indx = (sort(idx(ij)));
ただし、これを行うことで、繰り返されるすべての値を組み合わせています。私が本当にやりたいのは、繰り返し要素のグループだけを結合することです。たとえば、次のようにします。
data = [1;1;1;2;2;2;3;3;3;4;4;4;4;4;3;3;2;2;2;2;1;1;1;1;4;4;4;4;]
要素の重複グループを結合する:
data = [1;2;3;4;3;2;1;4;]
順序を維持しながら、繰り返し要素のグループを結合する必要があります。組み合わせのインデックスに基づいて別の変数のデータを平均化する必要があるため、インデックスを返すことも役立ちます。
例えば:
data = [1;1;1;2;2;2;3;3;3;4;4;4;4;4;3;3;2;2;2;2;1;1;1;1;4;4;4;4;]
data2 = [7;2;4;5;3;4;6;8;5;3;5;7;4;2;4;6;8;4;3;6;7;8;4;2;9;3;2;0;]
dataCombined = [1; 2; 3; 4; 3; 2; 1; 4; ]
data2average = [4.33; 4; 6.33 4.2 5; 5.25; 5.25; 3.5; ]
誰でも提案できますか?
解決:
回答ありがとうございます。MZimmerman6 のソリューションは私にとってはうまくいきました。「data2」配列の値を平均化するために何をしたかを示したかったのです。
data = [1;1;1;2;2;2;3;3;3;4;4;4;4;4;3;3;2;2;2;2;1;1;1;1;4;4;4;4;];
data2 = [7;2;4;5;3;4;6;8;5;3;5;7;4;2;4;6;8;4;3;6;7;8;4;2;9;3;2;0;];
change = diff(data)~=0;
indices = [1,find(change)'+1];
compressed = data(indices)';
numberOfRepeatingGroups = size(indices);
for i=1:numberOfRepeatingGroups(1,2)
if(i == 1)
dataToAverage = data2(indices(1,1):(indices(1,2)-1));
elseif (i == numberOfRepeatingGroups(1,2))
dataToAverage = data2(indices(1,i):end);
else
dataToAverage = data2(indices(1,i):(indices(1,(i+1))-1));
end
data2Averaged(1,i) = mean(dataToAverage(:));
end
data2Averaged =
4.3333 4.0000 6.3333 4.2000 5.0000 5.2500 5.2500 3.5000