1

给定 a = [1, 7] 和 b = [4, 10],我想创建一个新向量 [1:4,7:10]。我可以通过循环来做到这一点,但我正在寻找矢量化解决方案。我尝试通过定义以下函数 fun = @(c,d) c:d 来使用 bsxfun,然后使用 bsxfun(fun, a, b)。它生成 1:4 但不是 7:10。谢谢。

4

1 回答 1

0

看看这是否适合你 -

lens = (b - a)+1; %// extents of each group
maxlens = max(lens) %// maximum extent

mask = bsxfun(@le,[1:maxlens]',lens) %// mask of valid numbers
vals = bsxfun(@plus,a,[0:maxlens-1]') %// all values
out = vals(mask).' %// only valid values are collected to form desired output

样品运行 -

a =
     1     7    15
b =
     3    12    21
out =
     1   2   3   7   8   9  10  11  12  15  16  17  18  19  20  21
于 2014-11-14T05:02:17.807 回答