Armadillo,在每列中找到最大索引
Armadillo, finding max index in each column
我正在寻找一种方法来找到对应于每列最大值的索引。我的目标是避免循环,并使用矢量化的armadillo函数找到Matlabic解决方案。
这可以在Matlab中通过以下命令轻松完成:[~,maxIndics]=max(A);
在armadillo中,您具有成员功能:A.max(行_of_max_val,列_of_mal_val);给出了整个矩阵中最大值的位置。
以及独立功能vec M=最大值(A);它输出每列的最大值,但不输出它们的索引。
但他们中没有一个人在耍花招。
拥有列最大值的索引可以用于以更矢量化的方式编写许多算法。例如,它可以用于维特比解码,或者用于k均值聚类。
显然,这个问题可以推广到考虑最小值而不是最大值,考虑行而不是列。
有人在考虑另一种解决方案吗?
最好。
我通常使用子矩阵视图。大致如下:
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;
}
Armadillo现在有.index_max()
和.index_min()
方法来查找这些索引,从7.2版开始。
一个不完美的答案应该是:
uvec indices = find((A.each_row()-max(A)) == 0);
问题:
- 如果max元素出现多次,则可以为一个唯一列返回多个索引
- 相对于矩阵的第一个元素而不是每列的第一个元件给出索引
相关文章:
- 数组索引的值没有增加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 查找最接近的大于当前数字的数字的索引
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 在C++中调整向量中的索引
- 重载元组索引运算符-C++
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 为std::string的某个索引赋值
- 并行用于C++17中数组索引范围内的循环
- 跟随整数索引列表的自定义类迭代器
- 如何在for循环中包含两个索引值的测试条件
- D3D11-将混合权重和索引传递到顶点着色器
- 将转换字符键入 int 以用作向量C++的索引
- 在 C++ 中访问数组负索引处的内存不会返回垃圾
- 如何为圆环创建索引
- 在子集化后将包含索引号的列表列表映射到标准索引序列
- 查找字符在两个索引之间出现的次数
- Azure Kinect 使用正文索引映射裁剪正文
- 使用Armadillo库中的指数向量索引矩阵
- Armadillo,在每列中找到最大索引