我有一个矩阵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循环,以便在有数十亿个点时最小化执行时间。
祝你好运
答案 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