matlab - 将数组转换为索引值

时间:2014-11-13 21:26:43

标签: bsxfun

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

1 个答案:

答案 0 :(得分: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