我正在将我在Python中“原型(prototype)化”的复杂数据分析例程移植到C++。我在整个Python代码中广泛使用了Numpy。我正在考虑在C++端口中使用GSL,因为它实现了我需要的所有各种数字例程(而Armadillo,Eigen等仅具有我所需的一个子集,尽管它们的API更接近于我正在寻找的API)对于)。
GSL中是否有等效于numpy.minimum
的代码(即,两个矩阵在元素上的最小值)?这只是我正在寻找的Numpy抽象的一个示例。这样的事情在使用GSL时是否只需手动重新实现?我注意到,GSL提供了以下功能:double gsl_matrix_min (const gsl_matrix * m)
但这只是提供整个矩阵的最小值。无论如何进行元素比较,似乎都无法使用GSL报告沿单个矩阵特定轴的最小值。这让我感到惊讶。
我的期望放错了地方吗?
最佳答案
您可以通过find()和.elem()函数在Armadillo中轻松实现按元素的最小值:
mat A; A.randu(5,5);
mat B; B.randu(5,5);
umat indices = find(B < A);
mat C = A;
C.elem(indices) = B.elem(indices);
对于Armadillo中不存在的其他功能,可能可以通过.memptr()函数将Armadillo矩阵与GSL函数连接。