gpt4 book ai didi

matlab - 如何合并重复值和重复值组并保持顺序?软件

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:55 28 4
gpt4 key购买 nike

我在组合 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

最佳答案

您可以使用导数来查找数据数组中的波动,这表明分组发生了变化。导数不为 0 的任何地方都会发生变化,无论是正数还是负数。找到这些变化发生的地方,然后抓取相应的索引。如下所示。

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;];
change = diff(data)~=0;
indices = [1,find(change)'+1];
compressed = data(indices)';

结果是

compressed =
1 2 3 4 3 2 1 4

当然,您也可以根据需要使用 indices 变量。

注意在第三行,我们添加索引 1,因为从技术上讲,数组的开头是一个变化,然后我们将 1 添加到 find 命令,因为我们在导数上使用 find,所以返回的 change 数组将比原来的短 1。

关于matlab - 如何合并重复值和重复值组并保持顺序?软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18701900/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com