c# - 在 C# 中有效地从二维数组中提取向量

标签 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];
            }

这个操作很慢。在 Matlab 中,我无需迭代即可提取向量,如下所示:

myVec = myMat[:,col];

有没有办法在 C# 中做到这一点?

最佳答案

C# 中没有这样的构造,可以让您像在 Matlab 中那样使用数组。使用您已有的代码,您可以使用 Task Parallel Library 加快矢量创建过程这是在 .NET Framework 4.0 中引入的。

Parallel.For(0, NTerms, i => myVec[i] = myMat[i, col]);

如果您的 CPU 有多个核心,那么您的性能会有所提高,否则不会有任何影响。

有关任务并行库如何与矩阵和数组一起使用的更多示例,您可以引用 MSDN 文章 Matrix Decomposition .

但我怀疑在进行一些严肃的数学计算时,C# 是否是一个不错的选择。

关于c# - 在 C# 中有效地从二维数组中提取向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14815441/

相关文章:

c# - 如何制作瓷砖线?

c# - 使用向下转换浅复制列表

javascript - 在 Javascript 中向嵌套数组添加元素

java - 无法引用 Action 监听器 (Jframe) 内的非变量

performance - 什么可能导致 Kafka `__consumer_offsets` 主题中的巨大负载?

c# - Go map 与 C# 字典

javascript - 是否可以在提交前从文本框中检索值?

c# - 简单选择上的 LINQ NullReferenceException

javascript - 遍历 JSON 返回未定义?

mysql - 如何解决 MySQL 中的性能 GROUP BY 问题?