是否有内置(无 for 循环)方法使用索引矩阵将向量的范围放入元胞数组?

Is there a built-in (no for loop) way to put ranges of a vector into a cell array using a matrix for the indices?

鉴于:

data = 0:10;
indices = [1 2; 3 7; 2 5];

是否有一种在线方法可以做到这一点?:

for i = 1:length(indices)
    out{i} = data(indices(i,1):indices(i,2))
end

您可以使用 arrayfun 执行此操作:

out = arrayfun(@(a,b) data(a:b), indices(:,1), indices(:,2), 'UniformOutput', false);

但是,在内部 arrayfun 可能仍然只是使用 for 循环,所以我不希望看到速度有任何改进。此语法仅允许您将其编写为单行代码。有点难看的一行。

以下是

out = arrayfun(@(ii)data(indices(ii,1):indices(ii,2)),1:size(indices,1),'UniformOutput',false)