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

ここに考えられる解決策の 1 つがありますが、これを完全にベクトル化された解決策とは呼びませ

 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 に答える