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