我有2d数组,由
组成让我们考虑以下
a(1,:)=[1,2,3,4,10,11,12,13,19,20,21,22];
a(2,:)=[4,1,3,2,4,3,1,2,3,2,4,1];
a(3,:)=[1,2,3,4,5,6,7,8,9,10,11,12];
根据上面的数组'a',它显示它根据第一列(根据y坐标)缩短。
但在我的情况下,我想按照以下步骤对它们进行排序
让我们考虑以下
a =
1 2 3 4 10 11 12 13 19 20 21 22
4 1 3 2 4 3 1 2 3 2 4 1
1 2 3 4 5 6 7 8 9 10 11 12
0 1 1 1 6 1 1 1 6 1 1 1
这里第4行表示两个连续y坐标(a(1,:))
之间的差异在那里第5个值显示快速变化所以我想考虑前4个值集并分析x和y坐标w.r.t x坐标(a(2,:))
对于整个数组以及后面的数组以相同的方式表示预期的结果。
a =
2 4 3 1 12 13 11 10 22 20 19 21
1 2 3 4 1 2 3 4 1 2 3 4
1 2 3 4 5 6 7 8 9 10 11 12
0 1 1 1 6 1 1 1 6 1 1 1
注意:
不应更改第3列值。
快速变化不是在同一时期获得的,就像在上面变化一样。(在我的情况下,它发生在每4个值之后)
每一瞬间的快速变化不是6(让解决方案对于值大于3的方便)
答案 0 :(得分:0)
我对你想要的东西感到有点困惑。此代码将您的数组分组为只有正常数量(由变量normalchange指定)更改的块。它将产生一个单元阵列,其中每个单元是一组相似的元素。在这种情况下,正常变化是1然后你得到三组。
如果有帮助,请告诉我。
a(1,:)=[1,2,3,4,10,11,12,13,19,20,21,22];
a(2,:)=[4,1,3,2,4,3,1,2,3,2,4,1];
a(3,:)=[1,2,3,4,5,6,7,8,9,10,11,12];
interestedmembers=0;
thingtoanalyse={};
startOfMembers=1;
normalchange = 1;
for i=2:size(a,2)
if a(1,i)-a(1,i-1) > normalchange
thingtoanalyse{end+1}=a(:,startOfMembers:startOfMembers+...
interestedmembers);
interestedmembers=0;
startOfMembers = i-1;
end
interestedmembers = interestedmembers+1;
end
% catch everything after the last jump and classify as interesting.
thingtoanalyse{end+1} = a(:,startOfMembers:end);