所以我有一个矩阵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索引聪明,但到目前为止没有成功..
答案 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
获得)将值放在第三列的正确位置。