我正在用c编写一个科学代码,它需要许多张量积和高阶张量运算,例如:收缩,kronecker产品等我计划使用有效的算法自己实现这一点,如文献和使用一个良好的BLAS库。我做了一些看,并没有真正找到任何c(大量的c ++,python等)。我是否遗漏了某些内容,或者说这在c中实施得不是很好?
感谢。
答案 0 :(得分:3)
在科学计算中有许多不同的张量用法,所以如果没有更多细节,这个问题很难回答。
SciComp上有一个相关的答案提到了Eigen,Armadillo,deal.II,libtensor和libdynd。
如果您有兴趣并行收缩大张量,请查看Cyclops Tensor Framework(CTF),它是多量子化学代码的后端。如果你想做大量的小收缩,CTF可能不会帮助你。
其他开源张量库包括libtensor和TiledArray,它们也用于量子化学。
MADNESS项目a tensor class可能会满足您的需求,如果感兴趣的是小尺寸。
itensor是另一个张量库,旨在支持DMRG计算。
FTensor是面向广义相对论的C ++张量库。
由于张量操作对于机器学习很重要,Facebook和Google等公司分别发布了THPP和TensorFlow等张量库。
有一个名为POOMA的非常古老的项目可能会support small tensors满足您的需求,但此项目已不再有效,您应该不会得到任何支持。
当其他所有方法都失败时,请参阅Wikipedia或Google(此处约有一半的信息是通过搜索"张量库"在Google上识别出来的,尽管我对大部分内容都有历史熟悉程度)
答案 1 :(得分:2)
也许您可以调查tensor extensions到GSL - GNU科学图书馆。
答案 2 :(得分:0)
你也可以使用元素 http://libelemental.org/about/
即使它是用C ++编写的,它也有一个C接口: “C ++ 11 API是迄今为止最完整的,但很大一部分库也暴露给C和Python接口。”
另外,请在github页面上的开发分支上使用最新版本: https://github.com/elemental/Elemental/
我遇到了一些使用最新版本解决的兼容性问题!