用索引矩阵寻址Matlab矩阵

时间:2011-11-08 13:02:35

标签: matlab matrix

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

因此,我正在寻找一个以列方式索引矩阵的命令。当然我可以通过循环轻松完成这项工作,但这似乎是一个非常糟糕的解决方案。我也提出了这个解决方案,但它不是很漂亮

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

提前致谢。

1 个答案:

答案 0 :(得分: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))