23 | 数字计算:介绍线性代数和数值计算库
吴咏炜
该思维导图由 AI 生成,仅供参考
你好,我是吴咏炜。
科学计算在今天已经完全可以使用 C++ 了。我不是从事科学计算这一领域的工作的,不过,在工作中也多多少少接触到了一些计算相关的库。今天,我就给你介绍几个有用的计算库。
Armadillo
说到计算,你可能首先会想到矩阵、矢量这些东西吧?这些计算,确实就是科学计算中的常见内容了。这些领域的标准,即是一些 Fortran 库定下的,如:
BLAS [1]
LAPACK [2]
ARPACK [3]
它们的实现倒不一定用 Fortran,尤其是 BLAS:
OpenBLAS [4] 是用汇编和 C 语言写的
Intel MKL [5] 有针对 Intel 的特定 CPU 指令集进行优化的汇编代码
Mir GLAS [6] 是用 D 语言写的
不管实现的方法是哪一种,暴露出来的函数名字是这个样子的:
ddot
dgemv
dsyrk
sgemm
……
这个接口的唯一好处,应该就是,它是跨语言并且跨实现的😅。所以,使用这些函数时,你可以切换不同的实现,而不需要更改代码。唯一需要修改的,通常就是链接库的名字或位置而已。
假设我们需要做一个简单的矩阵运算,对一个矢量进行旋转:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
C++科学计算库Armadillo和Boost.Multiprecision的文章深入介绍了它们在线性代数和高精度计算方面的应用。首先展示了Armadillo库的直观性和简洁性,并详细列举了其功能特点,包括支持稀疏矩阵、按元素的运算等。同时,介绍了Boost.Multiprecision库的高精度计算需求和易用性,突出了其优势。此外,还提到了表达式模板技术的应用,以及Armadillo库对BLAS和LAPACK的依赖。总的来说,文章内容丰富,涵盖了科学计算库的技术特点和实际应用,对读者快速了解C++科学计算库具有重要参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《现代 C++ 编程实战》,新⼈⾸单¥59
《现代 C++ 编程实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- 廖熊猫易用的东西灵活性就稍微弱一些,在能快速完成业务的时候,我还是比较偏向易用性,一查文档马上就可以用起来,真的出现性能瓶颈的时候再去折腾复杂性能好的东西。 给需要学习线性代数的小伙伴推荐一个教材:http://textbooks.math.gatech.edu/ila/index.html 需要点英语基础才行。
作者回复: 我的观点和你差不多……🤗 那个在线教材真棒!谢谢推荐。
2020-01-1714 - 三味当然更偏向易用性。实现更重要。一个算法不确定是否能实现,先从易用的库开始快速迭代算法实现。优化是最后要考虑的。 还有就是在选择第三方库的时候,我倾向于选择纯头文件的库。比如Eigen3。我用Eigen3无非就是矩阵计算,能够快速求解线性方程组的解就好,并没有高次方程求根这种(其实也有,为了求一个三次方程就要引用一个库,我选择找一个现成的实现)。 当然,开篇的例子的话,我肯定也不会用Eigen去求,三维空间下的数学,还是交给glm这种用于渲染的数学库比较好,纯头文件,易于集成,而且简单好用。 当然我说的只是图形渲染中常用的一些库。貌似还真没看到过图形学方面代码用犰狳库的,因为用不到吧。 最后,我看了一下老师最后列出来的博客,提到了From Mathematics to Generic Programming,哈哈,我手头上也有一本这书!当然是中文版的。。。《数学与泛型编程》。。当时以为是接触泛型编程,顺便了解一些数学才买的。结果买来之后第六章群那里我实在看不动了。。其实第五章我就看着老吃力了。。。即使如此,也感觉收获不小。比如,看这本书之前我一直不知道质数筛。。还有古人如何计算乘法,如何计算最大公约数等等。回头我还要继续啃一下这本书。
作者回复: 看来你是真正搞计算的啊……我是偶尔碰一下而已。 《数学与泛型编程》绝对是好书。这本已经算是作者的另一本书的简化版本了(那本书更抽象,我也只啃了个开头而已了)。对于喜欢数学的程序员,我绝对大力推荐。
2020-01-175 - 花晨少年科学计算这块最近几年突然热起来了,在调研xdl深度学习框架时,推理引擎cpu版本用的就是mkl库做各种矩阵运算,但是可能还是gpu版本的cuda库应用更广泛一些,听说cuda编程挺难的,需要了解很多异构硬件的细节。
作者回复: 如何用 C++ 做异构计算,这是一个新领域。可以留意一下 SYCL。
2020-01-182 - aL我之前用的eigen,感觉还不错,如果涉及到大规模数值运算的话,还是得上gpu吧!
作者回复: 是的,异构计算也是新的重要方向。SYCL 就是其中之一,可以了解一下。
2020-02-081 - Milittle专栏深度确实可以,我之前在做Matlab代码转C++的时候,可以说armadillo是一个比较好用的工具(最起码性能还过得去)。这个老师在专栏里面没有提到,我说一下,可以给小伙伴们提供一点帮助~万一你哪天需要把Matlab的算法做一个快速实现呢?
作者回复: 嗯,看到过这种说法。我没啥体验,因为我不用MatLab。
2020-03-19 - Geek_dddde9工作中感觉eigen更友好一些2021-07-01
- 秀我发现留言的都是大佬。学习了学习了。2020-02-01
收起评论