我正在寻找一种方法来查找与每列最大值对应的索引。我的目标是避免循环并使用矢量化犰狳函数找到Matlabic解决方案。
使用以下命令可以在Matlab中轻松完成: [〜,maxIndices] = max(A);
在犰狳中你有成员函数: A.max(row_of_max_val,col_of_max_val); 给出整个矩阵中最大值的位置。
独立功能 vec M = max(A); 输出每列的最大值但不输出其索引。
但他们都没有做到这一点。
具有列最大值的索引可用于以更矢量化的方式编写多个算法。例如,它可以用于维特比解码,或用于k均值聚类。
显然,考虑到最小值而不是最大值和行而不是列,可以推广这个问题。
有人在想另类解决方案吗?
最佳。
答案 0 :(得分: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;
}
答案 1 :(得分:1)
一个不完美的答案就是:
uvec indices = find((A.each_row()-max(A)) == 0);
问题:
答案 2 :(得分:0)
Armadillo现在有.index_max()
和.index_min()
方法来查找这些索引。