我有一个矩阵M
,其行按一列排序(比方说c
),即:
M = sortrows(M,c)
我需要对矩阵的每一行应用一个函数,这个函数取决于c
用于排序的列中的值。例如,如果 columnc
是向量[1 1 1 2 2 2 3 3 3 3 3]'
,我需要调用f1
第 1 到 3f2
行,第 4 到 6f3
行和第 7 到 11 行作为参数。
另外,我想调用每个函数,其中包含c
作为参数传递的列中相同值的所有行,以避免在行上使用太慢的循环。有没有(非常)快速的方法来做到这一点?(如果不需要排序M
,那就更好了)。
谢谢。
我用一些代码来精确我的需要(M 在这里没有排序,因为它似乎没有必要):
function test
M=zeros(4,2);
c=2;
M(1:2,2)=[3,6]';
M(3:5,2)=[1,3,1]';
M(6:10,2)=[3,6,1,6,3]';
function res = f1(y1,y2)
res=[1,1,1];
end
function res = f3(y1,y2)
res=[2,2,2];
end
function res = f6(y1,y2)
res=[3,3,3];
end
我们有:
M =
0 3
0 6
0 1
0 3
0 1
0 3
0 6
0 1
0 6
0 3
现在每一行都将是函数 fi,i=1,...n 的参数,其中 i=c 列中的值,即上面的示例:
f3 将第 1,4,6,10 行作为参数,f1 将第 3,5,8 行作为参数,f6 将第 2,7 和 9 行作为参数。
我怎么能不使用循环来做到这一点?