1
给定a = [1,7]和b = [4,10],我想创建一个新的向量[1:4,7:10]。我可以用循环做到这一点,但我一直在寻找矢量化的解决方案。我尝试通过定义下面的函数fun = @(c,d)c:d,然后使用bsxfun(fun,a,b)来使用bsxfun。它产生1:4但不是7:10。谢谢。matlab - 将数组转换为索引值
给定a = [1,7]和b = [4,10],我想创建一个新的向量[1:4,7:10]。我可以用循环做到这一点,但我一直在寻找矢量化的解决方案。我尝试通过定义下面的函数fun = @(c,d)c:d,然后使用bsxfun(fun,a,b)来使用bsxfun。它产生1:4但不是7:10。谢谢。matlab - 将数组转换为索引值
看看这对你的作品 -
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
谢谢。现在我看到了你的答案,我看到我选择了一个我试图完成的事情的例子。向量a和b中的值不相关,即a(1)-b(1)= x = a(2)-b(2),并且I可以具有多于两个条目。例如:a = [1,7,15] b = [3,12,21],并且所需的输出是[1:3,7:12,15:21] – Scott
检查更新的代码?同时考虑将新添加的输入案例编辑到问题中,以便发布的解决方案保持同步。 – Divakar