2

这是事情

我有一个大矩阵,我需要根据一些列对其进行排序:

B是大矩阵

A=sortrows(B,[1 4 9 10]);%Just a sample input vector

到目前为止还可以。但是在下一步中(我正在迭代这个函数)我将需要这个:

A=sortrows(B,[1 4 9 10 16]);%Notice I just add a new column to input vector

在下一次迭代中同样的故事

所以我的问题是我可以在每次迭代中使用以前的排序结果吗?

编辑 - - - - - - - - - - - - - - - - - -

对于那些熟悉的人来说,主要问题是特征选择任务。我有一个矩阵,可以将其命名为 IS。你可以在这里找到一个。在 IS 中,行是对象,列是特征。任务是评估基于特征的子集一个适应度函数。我不会进入适应度函数,因为它不相关,但作为一个黑盒,输入和输出是:

function fitnessValue=fitness(inputMatrix,featureSubset)
end

inputMatrix 必须根据 featureSubset 进行排序,但根据特征集的任何排列进行排序可以做到这一点

现在主要算法

featureSubset=[];
iter=1;
while iter<iterMax and fitnessValue<1
j=chooseFeature(IS,featureSubset) %select a feature that has not been selected yet based on some parameters 

featureSubset=union(featureSubset,j);%Add j to selected features

IS=sortrows(IS,featureSubset);%Here is the problem

fitnessValue=fitness(IS,featureSubset)
iter=iter+1;
end

就是这样,在每次迭代中,我一个一个地添加特征并评估新的特征子集,但为了做到这一点,我需要根据特征子集对 IS 矩阵进行排序。正如我在上一次迭代中所说,我还根据 featureSubset 对整个矩阵进行排序(1:end-1) 我相信我可以使用以前的排序结果,并且以某种方式仅根据当前选择的特征对 IS 进行排序并获得相同的结果。

PS如果有人可以解释sortrows的算法,我将不胜感激

4

1 回答 1

0

这是我想出的功能,将来可能对某人有用:

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

结果 - - - -

a=sort2(IS,[1 4 9 10]);
a=sort2(IS,16,a);
b=sort2(IS,[16 1 4 9 10]);

isequal(a,b)=1
于 2013-08-19T09:02:28.443 回答