sortrows based on previous sort results

1 次查看(过去 30 天)
Here is the thing
I have a large matrix and I need to sort that based on some columns:
B is the large matrix
A=sortrows(B,[1 4 9 10]);%Just a sample input vector
Its OK so far.But then in next step (I'm iterating this function) I will need this:
A=sortrows(B,[1 4 9 10 16]);%Notice I just add a new column to input vector
And same story in next iterations
So my question is how can I use previous sort results in each iteration?
Please consider that the sequence of input vector doesn't matter for me.And if it is possible please give me a note on this sortrows algorithm.
Edit------------ Can someone please explain sortrows algorithm?
Thanks in advance.
  2 个评论
Image Analyst
Image Analyst 2013-8-19
Why do you even need to do the first sort? The second sort will give you the same results regardless of whether you had a sorted or unsorted array to begin with. So doing the first sort is useless. Is there some reason why you needed/wanted to do the first sort?
amir
amir 2013-8-19
Yes this is going to be a fitness function .I am evaluating the subset[1 4 9 10] in iteration t based on some fitness function and then in iteration t+1 I need to evaluate the subset[1 4 9 10 16] .In evaluation phase I am using sortrows as a preprocess then the rest.So if I can use sorted matrix in previous iteration it will save me god knows how much time!!

请先登录,再进行评论。

采纳的回答

amir
amir 2013-8-19
This is the function that i came up with might be useful for someone in future :
function [ndx]=sort2(x,cols,oldIndex)
x=x(:,cols);
[m,n] = size(x);
if nargin<3
ndx = (1:m)';
else
ndx=oldIndex;
end
for k = n:-1:1
[ignore,ind] = sort(x(ndx,k));
ndx = ndx(ind);
end
result--------
a=sort2(IS,[1 4 9 10]);
a=sort2(IS,16,a);
b=sort2(IS,[16 1 4 9 10]);
isequal(a,b)=1

更多回答(1 个)

Azzi Abdelmalek
Azzi Abdelmalek 2013-8-19
编辑:Azzi Abdelmalek 2013-8-19
B=sortrows(B,[1 4 9 10])
B=sortrows(B,[1 4 9 10 16])
  5 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2013-8-19
In this case it's true, but it's not what you are asking. Check this case
C=randi(5,20) % Example
A=sortrows(C,[1 4 9 10 16]);
B=sortrows(C,[1 4 9 10]);
B=sortrows(B,16);
isequal(A,B)
A and B are different
amir
amir 2013-8-19
Please consider that sequence does not matter for me so [1 4 9 10 16] , [ 10 16 9 14] , ... any permutation is same thing.I just want to achieve a matrix sorted by any of these vectors based on a matrix that has already been sorted in last iteration based on [1 4 9 10] .I can not explain it better please excuse me for my poor english.

请先登录,再进行评论。

类别

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

Community Treasure Hunt

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

Start Hunting!

Translated by