这是事情
我有一个大矩阵,我需要根据一些列对其进行排序:
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
下一次迭代中的相同故事
所以我的问题是我可以在每次迭代中使用以前的排序结果吗?
编辑------------------------------------
对于那些熟悉主要问题的人是一个特征选择任务。我有一个矩阵让我们命名为。你可以在here中找到一个。在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进行排序,得到相同的结果。
P.S 如果有人可以解释sortrows算法,我会非常感激
答案 0 :(得分: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