我有一個非常大的二維數組,我需要計算此數組上的矢量運算。 NTerms和NDoc都是非常大的整數。在C#中有效地從二維數組中提取矢量
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#中執行此操作嗎?
您是否有可能在創建時轉置myMat?因爲那麼你會提取行而不是列更多的緩存一致,應該更快(雖然我不知道以什麼因素)。另一種選擇是使用'Marshal.Copy'複製內存。此外,你可以嘗試與'Parallel.For'並行。 – 2013-02-11 15:50:37
如果您喜歡使用Matlab,您可能有興趣從C#調用Matlab,例如,請參閱http://stackoverflow.com/questions/5901664/calling-a-matlab-function-from-c-sharp。一點搜索會給你幾個結果。 – 2013-02-11 16:57:28