2

我有一个多维时间序列数据,它们是动作识别的特征。我有 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

然后,结果将是一个缩减的向量(数据的压缩版本),其中前 2 行数据将由集群 id 1 表示,第 3 行数据由集群 id 2 表示,第 4 行 = 1,第 5、第 6 和第 7 行行将被组合并由第 3,8th 和第 9 行 2 和最后一行 4 表示。因此,最终的数据表示成为一个压缩字符串,其维度和长度也减少了:Compressed_Data = [1 2 1 3 2 4]'。如何进行此映射和转换?先感谢您。

4

1 回答 1

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])

如果这不是您要找的,请告诉我。

于 2013-11-01T03:40:54.640 回答