Eigen非常维护良好(目前,至少每个月都会推出新版本),并支持您所需的其他操作。
这里有一份较为全面且相对较新的调查报告,包括基准测试结果,请点击此处查看。
我认为你可以通过将Boost.UBlas与类似LAPACK或Intel MKL这样的底层数值库绑定来加速它的运行,但我还没有尝试过。
据我了解,经常作为备选的实现方案是Boost.UBlas和MTL。我认为广泛采用这些方案更容易促进持续支持和发展。
multi::array<int, 2> A({m, n});
A[i][j] += 42;
A.base() + i*stride_1 + j*stride_2
的机器码。想要使用简单的数组算术运算,例如array1 = array2 + 2 * array3
。我决定将数组算术运算与数据结构分开。虽然如此,该库非常兼容STL算法(如果您的步幅允许,它还具有使用BLAS的适配器)。过度简化一些关于存取模式的问题...。更多信息请参见https://gitlab.com/correaa/boost-multi#whats-up-with-the-multiple-bracket-notation。template<class T, class X, class Y>
auto axpy(T alpha, X const& x, Y&& y) -> Y&& {
assert( extensions(x) == extensions(y) );
std::transform(
x.elements().begin(), x.elements().end(),
y.elements().begin(),
y.elements().begin(),
[&](auto const& ex, auto& ey) {return alpha*x + ey;}
);
return std::forward<Y>(y);
}
...
auto array1 = axpy(2, array2, +array3); // array1 = 2*array2 + array3; // unary + will make a modifiable copy before it starts.
只要我能,我会一直维护它,并欢迎贡献者。
在这里先声明一下,以下内容是毫不掩饰的自我推销:
https://github.com/ndarray/ndarray
值得研究。
虽然它不提供优化的数学运算符,但它确实为此提供了与Eigen的接口。它真正突出的地方在于通过SWIG或Boost.Python提供与Python/NumPy的互操作性。