我有多维时间序列数据,是动作识别的功能。我有20个变量代表3D关节位置,四元数值,平均值,关节之间的欧氏距离。我已经应用了k = 4的kmeans聚类。在聚类之后,我想将共同发生的聚类id组合在一起,使得与它们相对应的数据点也被该聚类id聚合在一起。例如,考虑10个数据样本的以下聚类索引,
IDX = [1 1 2 1 3 3 3 2 2 4]'
让数据如下,其中A,B,C,D,E,F,G,H是3个特征变量,其中(AC)表示特定关节的(x,y,z)坐标,D表示关节相对于头部的欧氏距离,(EH)是关节的四元数值。让数值为元素。 Data =
A B C D E F G H
a1 b1 c1 d1 e1 f1 g1 h1
a2 b2 c2 d2 e2 f2 g2 h2
a3 b3 c3 d3 e3 f3 g3 h3
a4 b4 c4 d4 e4 f4 g4 h4
a5 b5 c5 d5 e5 f5 g5 h5
a6 b6 c6 d6 e6 f6 g6 h6
a7 b7 c7 d7 e7 f7 g7 h7
a8 b8 c8 d8 e8 f8 g8 h8
a9 b9 c9 d9 e9 f9 g9 h9
a10 b10 c10 d10 e10 f10 g10 h10
然后,结果将是一个简化的向量(数据的压缩版本),其中前两行数据将由集群id 1表示,第三行数据由集群id 2,第4行= 1,第五行表示第六行和第七行将被组合并由第3,8和9行乘以2并且最后一行由4表示。因此,最终数据表示变为压缩字符串,其维度和长度也减小:Compressed_Data = [1 2 1 3 2 4]'
。我该如何进行映射和转换?提前谢谢。
答案 0 :(得分:1)
要压缩索引数组IDX
,您可以尝试以下操作:
a = IDX; % for clarity, use a different variable, a
a(find(diff(IDX)==0)+1) = []; % remove repeating elements
Compressed_Data = a;
可替换地,
Compressed_Data = IDX([1; find(diff(IDX(:))~=0)+1])
如果这不是您想要的,请告诉我。