2017-10-29 10 views
0

bsxfun(高速で動作します)とarrayfun(私が理解できる限り、ループは内部的には遅いと予想されています)は、少なくとも、最も基本的なレベル。arrayfun to bsxfun possible

これを言って、私は特定のインデックス

  • が数である(特定の位置に番号を追加する前に、yと言って、指定した配列内のすべての数値を合計する

    1. をしようとしています上記のインデックス位置で)を合計します。

    私は簡単にサンプルコードの下の部分でこれを行うことができます:

    % index array 
    x = [ 1:6 ]; % value array 
    y = [ 3 3 4 4 1 1 ]; 
    % arrayfun version 
    o2 = arrayfun(@(a) ... 
           sum(y(1:(a-1)))+... 
           y(a), ... 
           x) 
    

    しかし、大きな入力に遅くなるように思われます。

    可能であれば、これをbsxfunで動作するバージョンに変換するにはどうすればよいのだろうかと思いました。

    P.S. yの数字は上記のように繰り返されませんが、これは単なる例でした。[3 4 3 1 4 ...]

  • +1

    ['cumsum'](https://www.mathworks.com/help/matlab/ref/cumsum.html)を見ましたか? – beaker

    答えて

    1

    xは常に1:nの形式ですか?答えはイエスであると仮定すると、あなたは非常に高速なコードと同じ結果を得ることができます。

    o2 = cumsum(y); 
    

    サイドノートを:あなたは、xの定義に括弧は必要ありません。

    +0

    確かに、私は同じことをもっと調査することで同じ結果になった;-) +1 –

    関連する問題