我有数组
a=1:20
以及一系列指示我想从哪里开始提取数据的索引:
i=[4,12]
对于每个索引i
,我希望该索引和接下来的四个(嗯,x
,真的)元素在一列或一行中。我将避免接近数组的末尾,以便可以忽略特殊情况。
如果我对此进行硬编码,我可以使用:
a([4:8;12:16])
这将达到我的结果。
但i
可能有许多不同的价值观。
关于如何将索引列表转换为范围矩阵或其他解决此问题的方法的任何想法?
编辑我正在使用 Matlab 2007;如果解决方案仅依赖于 Matlab 的内部结构和工具箱,那将是可取的。 bsxfun
直到2007年才出现a。
让i
成为你的 indexx,除了 i
中的元素之外,x
你想要的元素数量,然后你可以使用
i = [4 6 8];
x = 4;
bsxfun(@plus, 0:x, i(:))
获取索引矩阵:
ans =
4 5 6 7 8
6 7 8 9 10
8 9 10 11 12
如果您无权访问bsxfun
则可以改用repmat
:
i = [4 6 8];
x = 4;
repmat(i(:), 1, x+1) + repmat(0:x, length(i), 1)
这是一个没有 bsxfun 的解决方案,但受上一个答案启发的 repmat。
i = [4 6 8];
x = 4;
p = repmat(1:x,length(i),1);
q = repmat(i',1,x);
p+q