1

ここに初めて質問を投稿してください!||私が得ることができるどんなアドバイス批評も喜んで受けます。

2つのベクトルがあります:v1v2length(v1)>>と仮定しますlength(v2)length(v2)ベクトルに沿ってサイズのウィンドウを移動しますv1。各ラグインデックスで、Iのウィンドウ部分からv1を減算しv2ます。次に、結果のベクトルの項を合計し、ベクトルの長さに沿ったすべてのラグインデックスに対してこの合計を返しv1ます。簡単にするために、エッジケースは無視しましょう。

これをforループで実行しましたが、ベクトルの長さは10 ^ 9 [以上]のオーダーであり、計算は単純ですが、全体を反復処理するのに長い時間がかかるようです。 。

何か案は?このような機能があるのではないかと思いますが、うまくいきませんでした。

4

1 に答える 1

3

質問の再構成を許可する場合は、基本的に1つのベクトルのウィンドウ化された合計が必要です。次に、これから他のベクトルの合計を減算します。

cumsum私の解決策は、matlab( )の累積合計関数を次のように使用することです。

l1 = length(v1);
l2 = length(v2);
windowSum = cumsum( [v1 zeros(1,l2)] ) - cumsum( [zeros(1,l2) v1] );
returnVal = windowSum - sum(v2);

これは、とが行ベクトルであることv1を前提としています。v2右側v1にゼロを埋め、累積合計を取り、左側にゼロを埋めた累積合計を減算します。これにより、先行するインデックスの要素のwindowSum(i)合計であるようなベクトルが生成されます。エッジの処理方法、ベクトルの長さなどに応じて、これで問題が解決するはずです。length(v2)v1i

于 2012-11-05T20:30:24.107 に答える