【问题标题】:C# Fast Matrix ManipulationC# 快速矩阵操作
【发布时间】:2014-11-26 00:16:01
【问题描述】:

在 C# 中有这样的矩阵

double[,] M

我想像 Matlab 一样快速处理其内容。特别是,在 Matlab 中有这段代码:

for i = 1:N
    M(i, 1:i) = 1;

我想在没有第二个循环的情况下在 C# 中使用它的等价物。我对此不确定,但据我所知,Matlab 对这一行 M(i, 1:i) = 1 使用了一个名为 Vectorization 的过程,这比我实现从 1 到 i 将每个单元格设置为 1 的 for 循环要快。也许我我错了,请纠正我。

那么如何在 C# 中像 Matlab 一样实现对矩阵的快速操作。

【问题讨论】:

    标签: c# matlab loops matrix


    【解决方案1】:

    一种常见的解决方案是使用像math.net numerics 这样的矩阵库来进行矩阵运算。

    【讨论】:

    • 嗯,我明白了......我认为有一些更简单的方法可以绕过 for 循环,这是 C# 本机库已经具备的。这个库会让这条线 M(i, 1:i) = 1 实际上比 for 循环快吗?或者更多是为了提供多种方便的小算法,让代码语法更加抽象。
    • 这些包中的大多数是用 C 或 Fortran 编写的库的包装器。如果我没有正确阅读文档,那么您对于底层线性代数引擎有三个选择:GotoBLAS、Intel MKL 或 AMD ACML。 GoBLAS 是非商业的。 MKL 是商用的,但它的区别是它是英特尔处理器上最快的矩阵库。我发现了这个免责声明:numerics.mathdotnet.com/docs/Matrix.html#Context-Linear-Algebra
    • 我在完全相同的页面上阅读:)。谢谢,我认为这种方法将为我的问题提供正确的答案。
    • 所以使用这个math.net ...在没有for循环的情况下编写这一行M(i,1:i)= 1的语法是什么:(?
    • 我希望这看起来正确... M.SetSubMatrix(i, 1, m.Dense(1,i,1));其中 m.Dense 创建一个 1 行的矩阵,i 列的值均为 1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    相关资源
    最近更新 更多