Vic*_*nov 3 arrays matlab vectorization
假设我有一个特定大小的矢量"toSplit"
我也是一个索引向量,我想分割矢量.例如:
splitInd = [ind1, ind2, ind3]
Run Code Online (Sandbox Code Playgroud)
我的目标是有三个向量:
v1 = toSplit(1:ind1)
v2 = toSplit(ind1+1:ind2)
v3 = toSplit(ind2+1:ind3)
v4 = toSplit(ind3+1:end)
Run Code Online (Sandbox Code Playgroud)
(当然,矢量将成为单元阵列的一部分).在这里运行循环很容易.问题是如何在不运行循环的情况下完成它(我们知道,这不是Matlab喜欢的东西)?
经过一些准备,它的工作是accumarray
:
%// example data
data = 1:10;
splitInd = [3, 6, 9];
%// get index array
subs = zeros(size(data));
subs(splitInd+1) = 1;
subs = cumsum(subs) + 1;
%// distributing values into cell array
output = accumarray(subs(:),data(:),[],@(x) {x});
Run Code Online (Sandbox Code Playgroud)
mat2cell
是另一种选择,代码更短,但可能不会更快.
output = mat2cell(data, 1, diff([0 splitInd numel(data)]) )
Run Code Online (Sandbox Code Playgroud)