通过向量中的索引处理多个范围

时间:2012-12-03 17:13:37

标签: matlab

首先,使用for循环可以轻松解决此问题。但是,我试图强迫/教我自己思考矢量,以利用Matlab最擅长的。

简体中,这是问题解释:

  • 我有一个包含数据的向量。
  • 我有一个2xN的开始/停止索引数组,表示向量中感兴趣数据的范围。
  • 我想对每个范围执行计算,得到一个数字(N个结果,对应于每个开始/停止范围。)

在代码中,这是我最后想要的一个例子:

A = 1:10000;
startIndicies = [5 100 1000];
stopIndicies = [10 200 5000];
...
calculatedResults = [func(A(5:10)) func(A(100:200)) func(A(1000:5000))]

A的长度和开始/停止索引数组的长度是可变的。

就像我说的,我可以通过for循环轻松解决这个问题。但是,由于可以与大型数据集一起使用,我想知道没有for循环是否有一个好的解决方案。

1 个答案:

答案 0 :(得分:0)

这是一个可能的解决方案,但我不会将其称为完全向量化的解决方案,而不是一个一个

 out = cellfun(@(i,j) fun(A(i:j)), num2cell(startIndicies), num2cell(stopIndicies) );

或者,如果您打算提供同质输出,

 out = arrayfun(@(i,j) fun(A(i:j)), startIndicies, stopIndicies);