用于数组,矩阵,向量和经典线性代数运算的C ++库

时间:2009-12-07 14:44:10

标签: c++ arrays

你在N维数组中使用哪个库?

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

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

你在用什么?

3 个答案:

答案 0 :(得分:7)

boost::array以及boost::MultiArray。还有一个非常好的线性代数包,称为uBLAS

答案 1 :(得分:3)

我在一些项目中也使用了armadillo。来自他们的网站:

  

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

     

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

     

如果已将C ++确定为首选语言,则此库非常有用   (由于速度和/或整合   能力),而不是另一个   像Matlab®或Octave这样的语言。它   根据许可证分发   在开源和开源中都很有用   商业背景。

     

Armadillo主要在NICTA(澳大利亚)开发,具有   来自世界各地的贡献。

答案 2 :(得分:2)

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

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

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