我正在寻找一种方法来找到对应于每列最大值的索引。我的目标是避免循环并使用矢量化 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/