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

时间:2012-11-13 13:03:50

标签: matlab bsxfun

我有阵列

a=1:20

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

i=[4,12]

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

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

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

这将实现我的结果。

i可能有许多不同的值。

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

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

2 个答案:

答案 0 :(得分:5)

i成为您的indicesx和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)

答案 1 :(得分:1)

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

i = [4 6 8];
x = 4;
p = repmat(1:x,length(i),1);
q = repmat(i',1,x);
p+q