【问题标题】:Which numerical library to use for porting from Matlab to C++? [closed]使用哪个数值库从 Matlab 移植到 C++? [关闭]
【发布时间】:2012-03-01 03:08:31
【问题描述】:

我目前正在 Matlab 中对一些依赖于矩阵、DSP、统计和图像分析功能的算法进行原型设计。

我可能需要的一些示例:

  • 特征向量
  • 2D 和 3D 中的卷积
  • FFT
  • 短时傅里叶变换
  • 希尔伯特变换
  • 切比雪夫多项式
  • 低通滤波器
  • 随机多元高斯数
  • kmeans

稍后我将需要在 C++ 中实现这些算法。

我还拥有 C++ 数字食谱的许可证,我喜欢它,因为它有详细的文档记录并且有各种各样的算法。 我还发现了一个有助于在 MEX 中包装 NR 函数的类:nr3matlab.h。 所以使用这个类我应该能够生成允许我从 Matlab 调用 NR 函数的包装器。这对我来说非常重要,这样我可以在从 Matlab 移植到 C++ 时检查每个步骤。 然而,C++ 中的数值配方有一些重要的缺点:

  • 算法实现简单,不一定非常高效 方式
  • 没有线程

因此,我正在考虑使用另一个数值库。 理想的图书馆应该:

  • 范围和功能尽可能广泛
  • 有据可查
  • (有商业支持)
  • 已经制作了 Matlab 包装器
  • 非常健壮
  • 非常高效
  • 线程化
  • (有一个可以转的GPU实现 用“开关”代替 CPU)

您会推荐哪个数值库(库)?

提前感谢您的任何回答!

【问题讨论】:

  • 列出一些你正在寻找的具体函数/算法,现在这个问题太模糊了。
  • 谢谢。列出了一些想到的。
  • 只是想我会提到像这样的问题在Computational Science上找到一个好地方以供将来参考。
  • @Andy,我买了Numerical Recipes in C++。多么无用的图书馆,但是这本书很棒。

标签: c++ matlab math numerical-methods numerical


【解决方案1】:

还有 Eigen 库:http://eigen.tuxfamily.org 但它主要用作更大框架的一部分。它提供了基本的(和更复杂的)代数

【讨论】:

  • 这是 c++ 模板的绝技,但编译速度很慢,而且错误消息可能非常长(非常长的 长)。
【解决方案2】:

其实你应该看看openCV

虽然它的第一个目标是计算机视觉/图像处理,但这个库有很多线性代数工具(几乎所有你想要的)。起初,这个库是由 intel 实现的,非常注重性能。它可以处理多线程,IPP,... 该语法比通常的 C++ 库更易于使用。

你应该看看这个cheat sheet。自 2.0 版以来,语法已更改为模仿 matlab。 这个库被广泛使用,并且非常活跃(最后一次大更新是 2011 年 8 月)。

【讨论】:

  • 我很惊讶您建议使用 OpenCV 而不是 Eigen。
【解决方案3】:

您有很长的需求列表,用一个库来涵盖所有需求可能具有挑战性。

对于一般的 Matlab 到 C++ 的转换,我强烈推荐 Armadillo,它是一个模板化的 C++ 库,专注于线性代数 --- 并且专注于简化编写类似 Matlab 的表达式。它具有非常好的性能,有很好的文档记录并积极维护。您可以从那里开始并尝试为您的任务填补缺失的部分。

【讨论】:

  • 谢谢。看起来也很不错。我特别喜欢它是基于 Lapack 构建的,同时提供了一个更简单且类似于 Matlab 的界面。
  • 在 BLAS 之上,这是一个接口。因此,您始终可以使用更快的 BLAS 而不是默认的 LAPACK。康拉德知道他的东西,很高兴与他合作。
【解决方案4】:

NAG 可能是一个不错的选择。大量金融机构在其数学库中使用它。不过,我上次使用它时还没有 GPU 实现。

【讨论】:

  • 谢谢。看起来非常好。您知道 1 个开发者许可大约需要多少费用吗?
  • @Andreas Werner Paulsen - 谷歌发现了这一点。 eduserv.org.uk/lns/agreements/nag/nag-pricing。不确定它对你有多大帮助。从他们的网站上看,教育机构可以享受优惠价格。
猜你喜欢
  • 2022-09-23
  • 2011-09-28
  • 2011-10-10
  • 2015-06-18
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
相关资源
最近更新 更多