3

我有数组

a=1:20

以及一系列指示我想从哪里开始提取数据的索引:

i=[4,12]

对于每个 index i,我想要该索引和列或行中的接下来的四个(嗯x,真的)元素。我将避免接近数组的末尾,以便可以忽略特殊情况。

如果我对此进行硬编码,我可以使用:

a([4:8;12:16])

这将达到我的结果。

i可能有许多不同的值。

关于如何将索引列表转换为范围矩阵或解决此问题的其他方法的任何想法?

编辑 我正在使用 Matlab 2007;如果解决方案仅依赖于 Matlab 的内部结构和工具箱​​,那将是更好的选择。bsxfun直到 2007a 才出现。

4

2 回答 2

5

除了 中的元素之外,让i您的索引x 和x您想要的元素数量i,然后您可以使用

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)
于 2012-11-13T13:08:28.277 回答
1

这是一个没有 bsxfun 但受先前答案启发的 repmat 的解决方案。

i = [4 6 8];
x = 4;
p = repmat(1:x,length(i),1);
q = repmat(i',1,x);
p+q
于 2012-11-13T13:23:56.887 回答