按两列其他列的顺序从一列创建新矩阵

时间:2014-11-18 13:17:32

标签: matlab sorting matrix indexing

所以我有一个矩阵A,以一个例子为例

       4   6   3.5
       3   6   -1
A  =   5   2   0.7
       4   3   1.2

我现在想用Matlab以非常具体的方式从A的最后一列中创建一个矩阵B. B的行应按A的第一列(按升序排序)排序,B的列应按A的第二列排序(升序)。这可以在B中给出空元素,应该为其指定NaN。应用于上面的例子,这给出了

        NaN   NaN   -1
B  =    NaN   1.2   3.5
        0.7   NaN   NaN

请注意,B中的行数和列数分别取决于A的第一列和第二列中的唯一元素的数量。

我尝试了一些不同的东西试图通过Matlab索引聪明,但到目前为止没有成功..

1 个答案:

答案 0 :(得分:1)

您可以使用此方法

[~,J1,K1] = unique(A(:,1));
[~,J2,K2] = unique(A(:,2));
sz = [numel(J1) numel(J2)];
B = nan(sz);
B(sub2ind(sz, K1, K2)) = A(:,3);

首先使用unique收集原始列中的唯一项及其索引。 B的大小由A的第一列和第二列中的唯一元素数决定。 现在使用线性索引(使用sub2ind获得)将值放在第三列的正确位置。