【发布时间】:2013-07-14 16:54:19
【问题描述】:
我有一个矩阵M,其中的行按一列排序(比如说c),即:
M = sortrows(M,c)
我需要对矩阵的每一行应用一个函数,这个函数取决于用于排序的列c中的值。例如,如果列 c 是向量 [1 1 1 2 2 2 3 3 3 3 3]',我需要为第 1 到第 3 行调用 f1,用第 4 到第 6 行调用 f2,用第 7 到第 11 行作为参数调用f3。
另外,我想调用每个函数,将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 行作为参数。
如何在不使用循环的情况下做到这一点?
【问题讨论】:
标签: matlab sorting vectorization