C++中的Fortran风格多维数组

6

有没有一种C++库提供类似Fortran的多维数组支持,具备切片、作为过程参数传递和良好文档的功能?我已经查看了blitz ++,但它已经停用!


3
请查看Boost.MultiArray,似乎有提供您所描述的功能的设施。我从未使用过它们,所以无法确定。 - Benjamin Lindley
似乎它几乎与我的描述兼容,除了对于数组切片的支持,我只是想知道是否可以像1D情况所需的那样将我的std :: array强制转换为这个数组。 - fedvasu
1
有切片支持,通过视图。 - Xeo
@Xeo 嗯,但那看起来有点奇怪! - fedvasu
2个回答

2
我强烈建议使用Armadillo

Armadillo是一个C++线性代数库(矩阵数学),旨在实现速度和易用性的良好平衡

这是一个C++模板库:

采用延迟评估方法(在编译时)将多个操作合并为一项,并减少(或消除)对临时变量的需求;这通过模板元编程自动完成

以下是网页上的一个简单示例:

#include <iostream>
#include <armadillo>

int main(int argc, char** argv)
{
    arma::mat A = arma::randu<arma::mat>(4,5);
    arma::mat B = arma::randu<arma::mat>(4,5);

    std::cout << A*B.t() << std::endl;

    return 0;
}

0

如果你正在使用OSX系统,那么你可以免费使用vDSP库。

如果你想部署到Windows目标平台,则需要授权Intel的相应库(MKL),或者使用免费的AMD向量数学库(ACML)。


我很感激,但我的需求略有不同,需要类似Fortran的多维数组,而不是线性代数包。我使用Linux,LAPACK、ATLAS和BLAS已经预装(netlib版本)。 - fedvasu
啊,抱歉伙计。我很久以前玩过Blitz++。除了缺乏开发之外,现在它有什么问题吗?祝你好运,一切顺利。 - learnvst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接