基于2D值对单元阵列进行排序

时间:2014-06-09 18:41:16

标签: arrays matlab topology

我有一个3X3单元格数组,每个元素都存储一个(x,y)点。

该点由[0,1]中的随机数生成。

我想要做的是对单元格数组进行排序,使其看起来像

前:9分

每个圆圈都是一个2D点

索引:左上角的(1,1)和右下角的(3,3)作为通常的数组索引

enter image description here 这是为了确保拓扑顺序。

我该怎么做?

提前感谢。

示例

pairs = [4 9 2 6 5 1 7 8 3; 9 6 2 1 3 8 7 4 5] (row 1 = x-values, row 2 = y-values))

enter image description here

我想要做的是将它们放在单元格数组中,以便它们可以通过读取线连接,如图像的拓扑结构。

1 个答案:

答案 0 :(得分:2)

排列数为factorial(9),这个数字不是很大。因此,一种粗暴的方法是可行的:测试所需条件的所有排列,并选择第一个有效的排列。

在下文中,我使用的是2x3x3阵列,而不是包含长度为2的向量的3x3单元阵列,因为它更容易。

N = 3;
data = rand(2,N,N);
permutations = perms(1:N^2); %// generate all permutations
for k = 1:numel(permutations)
    dx = reshape(data(1,permutations(k,:)),N,N); %// permuted x data
    dy = reshape(data(2,permutations(k,:)),N,N); %// permuted y data
    if all(all(diff(dy,[],1)<0)) && all(all(diff(dx,[],2)>0)) %// solution found
        disp(dx) %// display solution: x values
        disp(dy) %// y values
        break %// we only want one solution
    end
end

请注意,对于data的某些选项,可能没有解决方案。