Matlab无环矩阵运算

Matlab无环矩阵运算,matlab,loops,matrix,Matlab,Loops,Matrix,我有一个矩阵X=[x1,y1;…;xn,yn]和向量索引(1,n)。索引的值介于1和5之间 我想根据索引把X划分为5个矩阵X1,…,X5 例如: X=[1,1;2,2;3,3;4,4;5,5;6,6;7,7;8,8]和index=[1,2,3,5,4,5,1] 所以,我想要X1=[1,1;8,8],X2=[2,2]等等 条件是不使用带if条件的X上循环,以便在有数十亿个点的情况下最小化执行时间 最好的问候您可以做的是使用逻辑索引 X1=X(index==1,:); % This will pic

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

我想根据索引把X划分为5个矩阵X1,…,X5

例如:

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

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

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


最好的问候

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

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。

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

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