1

首先,这个问题很容易用 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 循环的好的解决方案。

4

1 回答 1

0

这是一种可能的解决方案,不过,我不会将其称为完全矢量化的解决方案,而是单线解决方案。

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

或者,如果您计划有同质的输出,

 out = arrayfun(@(i,j) fun(A(i:j)), startIndicies, stopIndicies);
于 2012-12-03T17:33:13.200 回答