2011-11-08 169 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