What may be the best way to order columns of a matrix?

2 次查看(过去 30 天)
I'd like to order each column for a matrix so that the smallest number is replaced with 1, the second smallest number is replaced with 2 and so on. Say, convert mat to mat2. Any way to do this fast?
The code for before-converted matrix: mat = [20 1 4;5 3 1;-3 1 9;9 1 1];
  1 个评论
John D'Errico
John D'Errico 2015-12-3
PLEASE DO NOT PASTE IN AN IMAGE. That makes it impossible for us to use your array without typing it in ourselves.

请先登录,再进行评论。

回答(1 个)

Guillaume
Guillaume 2015-12-3
The second return value of sort tells you which row should receive 1,2,3,4... You can use sub2ind, bsxfun or a loop to distribute the values:
mat = [20 1 4;5 3 1;-3 1 9;9 1 1];
[~, order] = sort(mat);
mat2(sub2ind(size(mat), order, repmat(1:size(mat, 2), size(mat, 1), 1))) = repmat((1:size(mat, 1))', 1, size(mat, 2));
mat2 = reshape(mat2, size(mat))
  5 个评论
Shawn Miller
Shawn Miller 2015-12-3
@Guillaume, the way Matlab uses matrix as parameter is interesting. Inspired from your code, mat2([2 4; 1 3])=[1 -1;20 2], for instance, I guess is assigning value from right side to the left side based on corresponding index and the result of mat2 is then a 1*4 vector [20 1 2 -1]. But what if I write mat2([2 4 1 3])=[1 -1;20 2]? What will I get?
Guillaume
Guillaume 2015-12-3
There is/(was?) a page in the documentation that describes the exact rules for indexing. I can't find it at the moment.
The rule is rather ill-designed in my opinion as it has exceptions, but in general:
A(I)
has the same shape as I and the shape of A is lost. Exceptions come when both are vector, then it's the shape of A.
If A does not exist prior to assignment, then it would appear that A is always a row vector.
The shape of the assigned is always lost, and values are assigned in linear order, that is by column. So in your example, [1 -1; 20 2], the values are flattened in the order [1 20 -1 2].
Similarly in mat2([2 4; 1 3]), the indices are flattened into [2 1 4 3]. In the other case, the indices are already a vector.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by