没有循环的Matlab矩阵运算

时间:2017-03-15 08:00:35

标签: matlab loops matrix

我有一个矩阵X = [x1,y1;...;xn,yn];和一个向量index(1,n)。 index的值介于1和5之间。

我想根据索引在5个矩阵X1,...,X5中划分X.

一个例子:

X = [1,1;2,2;3,3;4,4;5,5;6,6;7,7;8,8]index = [1,2,3,5,4,4,5,1]

所以,我想要X1 = [1,1;8,8], X2 = [2,2]等......

条件是不使用带有if条件的X循环,以便在有数十亿个点时最小化执行时间。

祝你好运

2 个答案:

答案 0 :(得分:0)

您可以做的是使用逻辑索引。

X1=X(index==1,:); % This will pick all rows of X for which index has the value 1
X2=X(index==2,:); % and the same for X2 to X5

这可能是整齐的循环。特别是如果你有一个索引数组的值超过5。

答案 1 :(得分:0)

您可以使用查找功能轻松访问所需的子矩阵:

X = [1,1;2,2;3,3;4,4;5,5;6,6;7,7;8,8];
index = [1,2,3,5,4,4,5,1];

Xi=@(x)X(index==x,:);
subX = arrayfun(Xi,1:5,'uniformoutput',0);

请注意,arrayfun可以将查找函数应用于每个索引,以便将所有生成的矩阵存储在单元数组中。然后可以使用以下方式访问它们:

subX{1}

哪个输出:

 1     1
 8     8