根据索引列表从数组中提取固定数量的数据

Ric*_*ard 3 matlab bsxfun

我有阵列

a=1:20
Run Code Online (Sandbox Code Playgroud)

和一系列指数,表明我想开始拉出数据的位置:

i=[4,12]
Run Code Online (Sandbox Code Playgroud)

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

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

a([4:8;12:16])
Run Code Online (Sandbox Code Playgroud)

这将实现我的结果.

但i可能有许多不同的价值观.

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

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

H.M*_*ter 5

除了元素之外,让i你的indicesx和x你想要的元素数量i,然后你可以使用

i = [4 6 8];
x = 4; 

bsxfun(@plus, 0:x, i(:)) 
Run Code Online (Sandbox Code Playgroud)

获得索引矩阵:

ans =

     4     5     6     7     8
     6     7     8     9    10
     8     9    10    11    12
Run Code Online (Sandbox Code Playgroud)

如果您无权访问,bsxfun可以使用repmat:

i = [4 6 8];
x = 4; 

repmat(i(:), 1, x+1) + repmat(0:x, length(i), 1)
Run Code Online (Sandbox Code Playgroud)