是否有内置(无 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)
鉴于:
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)