MATLAB:从起点矢量和终点矢量开始,在这些点之间运行连续数字

时间:2013-03-11 23:22:08

标签: matlab vector

这可能很简单,但这是我的问题。

我有两个向量,开始和结束。开始是连续数字序列的起点,结束是连续数字序列的终点。我想创建一个包含这些运行的向量。

例如,说

starts = [2 7 10 18 24]  
ends = [5 8 15 20 30]

我想创建以下向量

ans = [2 3 4 5 7 8 10 11 12 13 14 15 18 19 20 24 25 26 27 28 29 30]

使用start:end仅使用每个向量的第一个元素


我还想在不使用(for)循环的情况下这样做,以尽可能快地保持它!

感谢您阅读

克里斯

2 个答案:

答案 0 :(得分:2)

假设始终有相同数量的起点和终点,并且它们总是匹配(例如第n个起点对应于第n个结束点),那么你可以做

cell2mat(arrayfun(@(s,e) (s:e), starts, ends, 'UniformOutput', false))

对于更详细的解释,arrayfun(@(s,e) (s:e), starts, ends, 'UniformOutput', false)部分将生成n个单元阵列的序列,其中n是startsends向量的长度,这样每个单元格数组具有对应于两个向量的第i个元素的序列starts(i):ends(i)。然后cell2mat函数将每个单独的单元阵列融合成1个更大的矩阵。

答案 1 :(得分:0)

如果您担心速度快,请预先分配:

starts = [2 7 10 18 24]  
ends = [5 8 15 20 30]
a = zeros(1,sum(ends)+numel(ends)-sum(starts));
% or a = zeros(1,sum(ends+1-starts))
j = 1;
for i = 1:numel(ends)
    j2 = j+ends(i)-starts(i);
    a(j:j2) = (starts(i):ends(i));
    j = j2+1;
end