【问题标题】:A C++ library for Arrays, Matrix, Vector, and classical linear algebra operations [closed]用于数组、矩阵、向量和经典线性代数运算的 C++ 库 [关闭]
【发布时间】:2009-12-07 14:44:09
【问题描述】:

你使用哪个库来处理 N 维数组?

我在工作中使用 blitz++,但我真的不喜欢它的某些方面。 它的某些方面甚至是危险的。之前需要调整大小 使用运算符 =。 A(Range::all(), Range::all()) 抛出 (0,0) 矩阵等,并且线性代数运算将是 通过 clapack 完成。

我使用并喜欢 eigen。我很欣赏它的“all-in-header”实现, C++ 语法糖,以及所有线性代数运算的存在 我需要(矩阵乘法,系统分辨率,cholesky...)

你在用什么?

【问题讨论】:

  • 我感觉你在问人们使用什么库来处理数学数组,而不是“C++ 数组”?如果是这样,您应该考虑在您的问题中更具体:)
  • 为什么要对数组进行“基本矩阵运算”?也许你的问题应该是关于 matrix 类的。
  • clapack 之类的有什么问题? (或者为什么它太“生硬”?)不清楚你在找什么。
  • 那为什么不是 eigen (eigen.tuxfamily.org) 呢?看起来快速且有据可查

标签: c++ arrays


【解决方案1】:

boost::arrayboost::MultiArray。在 boost 中还有一个相当不错的线性代数包,叫做 uBLAS

【讨论】:

【解决方案2】:

还有我在一些项目中使用的armadillo。从他们的网站:

Armadillo 是一个 C++ 线性代数库(矩阵数学),旨在 速度和轻松之间的良好平衡 使用。整数、浮点数和 也支持复数 作为三角函数的子集和 统计功能。各种矩阵 分解是通过提供的 与 LAPACK 的可选集成和 ATLAS 库。

采用延迟评估方法(在编译期间) 将多个操作合二为一 并减少(或消除)对 临时工。这是完成的 通过递归模板和 模板元编程。

如果 C++ 已被确定为首选语言,则此库很有用 (由于速度和/或集成 能力),而不是另一个 像 Matlab ® 或 Octave 这样的语言。它 根据以下许可分发 在开源和 商业环境。

犰狳主要由 NICTA(澳大利亚)开发, 来自世界各地的贡献。

【讨论】:

  • +1 看起来不错,“平衡良好”。有没有人将它的速度比作 blitz, numpy ... 如 www.scipy.org/PerformancePython laplace.py ?
  • +1 表示需要进行经验比较。为此,我们需要某种库,以便可以开始为不同的编译器、操作系统、... 收集结果
【解决方案3】:

我们已经成功使用TNT 多年。然而,有足够的问题,我们正在转向内部开发的解决方案。对我们来说最大的两个症结是

  • 数组不是线程安全的,即使是读取访问,因为它们使用非线程安全的引用计数。
  • 当您编写 const 正确的代码时,数组会导致各种问题。

如果这些都不是问题,那么它们对于许多常见的数组任务来说相当方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 2021-10-25
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多