快速,轻量级的C ++张量库,可用于尺寸无关的代码


20

我正在寻找一个支持维度无关代码的C ++张量库。具体来说,我需要沿每个维度(最多3个)执行操作,例如,计算加权和。尺寸是模板参数(因此是编译时常数)。另一个限制是该库应该相对轻量级,因此本征/ Boost样式要比Trilinos / PETSc轻。

有什么建议么?

注意:我查看了Eigen,并认为它几乎完全符合轮廓,如果它不限于2D张量。如果我对此感到误解,请纠正我。

Answers:


9

FTensor是仅包含标头的轻量级完全模板化库,其中包含符合人体工程学的求和符号。它已经在2、3和4维上进行了广泛的测试,但是对于任何数量的维都可以正常工作。


6

就其价值而言,Eigen确实将Tensor类作为不受支持的模块。

http://eigen.tuxfamily.org/dox-devel/unsupported/group_ CXX11 _Tensor__Module.html

我自己没有使用过,所以不能多说。

Armadillo类库具有三阶张量类。

http://arma.sourceforge.net/

我也没有使用过Armadillo的张量功能,但是我已经尝试了标准矩阵类,它们似乎相对易于使用并且性能良好。


2
更具体地说,犰狳具有Cube类该类实现了三阶张量
mtall 2014年

6

我认为这个新taco库确实也很好。

Tensor Algebra Compiler(taco)是一个C ++库,用于计算稀疏和密集张量上的张量代数表达式。它使用新颖的编译器技术,与稀疏张量代数和稀疏线性代数广泛使用的库中的手动优化内核在性能上具有竞争力。

您可以将taco用作C ++库,使您可以加载张量,从文件中读取张量以及计算张量表达式。您也可以将taco用作代码生成器,该代码生成器生成计算张量表达式的C函数。

谈话:https//www.youtube.com/watch?v = Kffbzf9etLE 论文:http//tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf


2
欢迎来到SciComp.SE!您能否扩展您的答案来描述库(链接可能会失效),尤其是它如何满足OP的要求?否则,更多的是评论。
Christian Clason

好像是一个非常有趣的库!看起来这会产生一个额外的编译步骤。我想知道是否有可能使用模板来实现?
HelloGoodbye


4

Deal.II库(http://www.dealii.org)虽然是为更大的目的而编写的,但它也具有张量类的子库,该类库可能会完成很多您想做的事情。特别是,它使用尺寸模板。

(免责声明:我是该库的主要作者之一。)


2

Boost.Numeric.uBlas库最近添加了一个张量扩展,它随Boost 1.70一起提供。请查看https://github.com/boostorg/ublas。它提供标准矩阵和张量运算,并具有运行时可变的顺序(维数),一阶和最后一阶存储格式(列和行主)的尺寸。您还可以轻松地使用爱因斯坦求和约定来表示ribtraryry张量乘法。Boost.Numeric.uBlas仅是标头,易于集成到现有项目中。


您也可以尝试使用Godbolt上的库:godbolt.org/z/Sf5V77
Cem Bassoy



1

LTensor(https://code.google.com/p/ltensor/)是一种非常易于使用的C ++模板库,可用于快速且轻量级(最高4级)的张量(基于符号)。您不需要编译任何东西,只需要包含主头文件即可。我已经在几个项目上使用它,并且工作正常。

它具有一些用于2级张量的内置功能,例如线性求解器,svd,LU和Cholesky分解等。我没有使用任何功能(为此我使用了其他库)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.