5

非常に大きな 2 次元配列があり、この配列に対してベクトル演算を計算する必要があります。NTerms と NDocs はどちらも非常に大きな整数です。

var myMat = new double[NTerms, NDocs];

この行列からベクトル列を抽出する必要があります。現在、for ループを使用しています。

            col = 100;
            for (int i = 0; i < NTerms; i++)
            {
                myVec[i] = myMat[i, col];
            }

この操作は非常に遅いです。Matlab では、次のように、反復を必要とせずにベクトルを抽出できます。

myVec = myMat[:,col];

C#でこれを行う方法はありますか?

4

2 に答える 2

0

考えられる問題:

これは、C#の多次元配列の要素にアクセスする方法でしょうか。この以前の記事を参照してください。

もう1つの問題は、連続していないメモリにアクセスしていることです。キャッシュからの助けはあまりなく、アレイが非常に大きい場合は、仮想メモリ(ディスク)からフェッチする必要があるかもしれません。

列ではなく行全体に一度にアクセスすると、速度はどうなりますか?それが大幅に高速である場合、それが連続メモリの問題であると90%確信できます...

于 2013-02-12T00:48:45.440 に答える