c++ - Armadillo ,在每一列中找到最大索引

标签 c++ c++11 armadillo

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

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

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

独立函数 vec M = max(A); 输出每列的最大值,但不输出它们的索引。

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

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

显然,这个问题可以通过考虑最小值而不是最大值和行而不是列来概括。

有人在考虑替代解决方案吗?

最好的。

最佳答案

我通常使用子矩阵 View 。沿着这些线的东西:

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;
}

关于c++ - Armadillo ,在每一列中找到最大索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33517374/

相关文章:

C++:不同类型模板函数(方法)的自定义返回值

c++ - Armadillo 是否支持 bool 和 8 位类型的矩阵和立方体?

c++ - '候选模板被忽略 : substitution failure' error help, C++, Armadillo, rank(),

c++ - SDL2 平滑时间点之间的纹理( Sprite )动画功能

c++ - 重载运算符 << c++,我正在尝试计算类的元素

c++ - 使用正则表达式和 Visual Studio 查找和替换窗口计算 IDL 文件中的注释

c++ - 基础解析/模板类型推导

c++ - C++11 lambda 本身是否受制于 RAII 自动释放?

c++ - std::result_of 简单函数

c++ - Windows 上的 Armadillo 和 Codeblocks