Arrays 利用二维矩阵对三维矩阵进行排序

Arrays 利用二维矩阵对三维矩阵进行排序,arrays,matlab,matrix,vector,3d,Arrays,Matlab,Matrix,Vector,3d,您好,我正在尝试使用二维坐标矩阵(2列和无限行)中的排序对三维坐标矩阵(3列和无限行)进行排序: 例如: A=[87 45 47;87 66 47;80 40 48;81 41 48;87 45 48;87 66 48;69 39 49;73 39 49;79 40 49;81 71 49;86 67 49;70 39 50;74 38 50;79 40 50;82 70 50;85 68 50;71 39 51;75 38 51] B=[8745;8745;8141;8040;7940;794

您好,我正在尝试使用二维坐标矩阵(2列和无限行)中的排序对三维坐标矩阵(3列和无限行)进行排序:

例如:

A=[87 45 47;87 66 47;80 40 48;81 41 48;87 45 48;87 66 48;69 39 49;73 39 49;79 40 49;81 71 49;86 67 49;70 39 50;74 38 50;79 40 50;82 70 50;85 68 50;71 39 51;75 38 51]

B=[8745;8745;8141;8040;7940;7940;7538;7438;7339;7139;7039;6939;8766;8766;8667;8568;8270;8171]

我想根据B对A进行排序,也就是说,我希望A最终为:

重新=[xn yn zn;x1 y1 z1;x2 y2 z2]

这是我的数据的一个例子。A是xyz坐标的矩阵,B仅为xy

他们有什么办法吗?或者有人能帮我吗


编辑:我使用了Jan提出的方法及其工作原理。如果我在第一篇文章中没有提供足够的信息,请向您表示感谢和歉意。

如果我理解正确,您希望对A的行进行重新排序,以便此矩阵的前两列与矩阵B相等(因此匹配顺序)。首先,B中的行不是唯一的,因此解决方案将不是唯一的

无论如何,一种方法将涉及对两行进行排序,以获得所需的新排序。该方法有些麻烦,但工作原理如下:

Anew = A(orderA(orderBinv),:)
首先,在
a(:,1:2)
B
上执行排序操作后获取排序:

[~, orderA] = sortrows(A(:,1:2));
[~, orderB] = sortrows(B);
然后,获取与第二次排序“相反”的操作顺序:

[~,orderBinv] = sort(orderB);
现在,为了使
A(:,1:2)
的顺序与
B
的顺序相等,您可以将反向排序和排序结合起来,如下所示:

Anew = A(orderA(orderBinv),:)
好的,我们在这里所做的是:进行反向排序,这样排序后的
B
版本将得到原始版本。排序后的
B
与排序后的
a(:,1:2)
匹配(如果是唯一的行),因此将此顺序应用于排序后的排序
a
会得到所需的结果


因此,对于给定的
A'
(为了阅读方便而进行了转置)

B'

87    87    81    80    79    79    75    74    73    71    70    69    87    87    86    85    82    81
45    45    41    40    40    40    38    38    39    39    39    39    66    66    67    68    70    71
产生的
重新'
等于

87    87    81    80    79    79    75    74    73    71    70    69    87    87    86    85    82    81
45    45    41    40    40    40    38    38    39    39    39    39    66    66    67    68    70    71
47    48    48    48    49    50    51    50    49    51    50    49    47    48    49    50    50    49

请您添加一个使用实际数据的示例,3D矩阵在哪里<代码>A也是2D。B是否包含A的所有x1到xn、y1到yn?这些值是否完全相同,B中是否没有其他元素?@grsgs使用
a
B
的最小输入数据,并重新向我们显示预期输出
?请将这些信息添加到问题中,不要以评论的形式发布。Thx Jan,这是我搜索的内容,只是我不知道如何在MATLAB中执行。又是Thx
87    87    81    80    79    79    75    74    73    71    70    69    87    87    86    85    82    81
45    45    41    40    40    40    38    38    39    39    39    39    66    66    67    68    70    71
47    48    48    48    49    50    51    50    49    51    50    49    47    48    49    50    50    49