Lee*_*eor 5 c# arrays performance matlab copy
我有一个非常大的二维数组,我需要在这个数组上计算向量运算。NTerms 和 NDocs 都是非常大的整数。
var myMat = new double[NTerms, NDocs];
我需要从这个矩阵中提取向量列。目前,我正在使用 for 循环。
col = 100;
for (int i = 0; i < NTerms; i++)
{
myVec[i] = myMat[i, col];
}
Run Code Online (Sandbox Code Playgroud)
这个操作非常慢。在 Matlab 中,我可以在不需要迭代的情况下提取向量,如下所示:
myVec = myMat[:,col];
Run Code Online (Sandbox Code Playgroud)
有没有办法在 C# 中做到这一点?
C# 中没有这样的结构可以让您像在 Matlab 中一样使用数组。使用您已有的代码,您可以使用.NET Framework 4.0 中引入的任务并行库来加速矢量创建过程。
Parallel.For(0, NTerms, i => myVec[i] = myMat[i, col]);
Run Code Online (Sandbox Code Playgroud)
如果您的 CPU 有多个核心,那么您的性能会有所提高,否则不会有任何影响。
有关如何将任务并行库与矩阵和数组一起使用的更多示例,您可以参阅 MSDN 文章矩阵分解。
但我怀疑 C# 在涉及一些严肃的数学计算时是否是一个不错的选择。