犰狳,在每一列中找到最大指数

jco*_*sco 5 c++ armadillo c++11

我正在寻找一种方法来查找与每列最大值对应的索引.我的目标是避免循环并使用矢量化犰狳函数找到Matlabic解决方案.

这可以使用以下命令在Matlab中轻松完成:[〜,maxIndices] = max(A);

在armadillo中你有成员函数:A.max(row_of_max_val,col_of_max_val); 给出整个矩阵中最大值的位置.

并且独立函数vec M = max(A); 其输出的最大的每一列的而不是其指数.

但他们都没有做到这一点.

列最大索引可用于以更矢量化的方式编写多个算法.例如,它可以用于维特比解码,或用于k均值聚类.

显然,这个问题可以考虑最小值而不是最大值和行而不是列来推广.

有人在想另类解决方案吗?

最好.

dow*_*ere 5

我通常会使用子矩阵视图.这些方面的东西:

using idx_type = arma::uword;
using namespace std;
using namespace arma;

template<typename T>
vector<idx_type>
colwise_max_idx(const Mat<T>& A) {
    vector<idx_type> res;
    for (idx_type i = 0; i != A.n_cols; ++i) {
        idx_type row_idx;
        A.col(i).max(row_idx);
        res.push_back(row_idx);
    }
    return res;
}
Run Code Online (Sandbox Code Playgroud)