我正在将我在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函数连接。

10-07 19:29
查看更多