2011-11-08 167 views
2

我正在使用命令[A,idx] = sort(A),它将矩阵A按列方式排序,这正是我想要的。矩阵idx显示了A的每列如何排序。现在,如果我尝试并访问MATLAB,假设我以绝对方式引用B。然而,这不是我想要的,我希望B的列按照相同的方案A排序。使用索引矩阵对Matlab矩阵进行寻址

因此,我正在寻找一个命令,将列矩阵索引。当然,我可以很容易地用循环做到这一点,但它似乎是一个非常糟糕的解决方案。我也拿出了这个解决方案,但它不是很漂亮

idx = idx+repmat(0:size(idx,1):size(idx,2)*size(idx,1)-1,size(idx,1),1) 

在此先感谢。

回答

2

考虑以下几点:

A = randi([1 10],[5 4]); 
[AA,idx] = sort(A); 

您的解决方案是不坏,你可以用BSXFUN更换REPMAT通话提高了一点:

idx = bsxfun(@plus, idx, 0:size(idx,1):numel(idx)-1); 
isequal(AA,A(idx)) 

另一种方法是将转换为线性指标使用SUB2IND:

idx = sub2ind(size(idx), idx, repmat(1:size(idx,2),size(idx,1),1)); 
isequal(AA,A(idx)) 
+0

谢谢,我想我会用bsxfun的方法。我很惊讶,matlab没有内置函数。 – foges