2d数组排序条件

时间:2015-11-18 19:21:55

标签: arrays matlab

我有2d数组,由

组成
  1. )。点(i)的y轴坐标的第1行
  2. )。点(i)的x轴坐标的第2行
  3. )。我
  4. 让我们考虑以下

    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坐标)缩短。

    但在我的情况下,我想按照以下步骤对它们进行排序

    • 识别y坐标的两个连续值之间的差异(a(a,:)的值)快速变化的位置
    • 对x协调(a(2,:))
    • 快速变化的值进行排序

    让我们考虑以下

    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的方便)

    • 任何人都可以帮我编码 *

1 个答案:

答案 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);