在Eigen,我可以按行或按列进行" partial reduction"获得最大系数。
例如,这个程序:
#include <iostream>
#include <Eigen/Dense>
int main()
{
Eigen::MatrixXf mat(2,4);
mat << 1, 2, 6, 9,
3, 1, 7, 2;
std::cout << "Column's maximum: " << std::endl
<< mat.colwise().maxCoeff() << std::endl;
}
输出:
Column's maximum:
3 2 7 9
我不想创建每列中具有最大系数的行向量,而是想构造一个行向量,其索引为每列的最大系数。
换句话说,我想修改程序,使输出变为:
Column's maximum:
1, 0, 1, 0
我知道我可以一次获得一列这样的索引:
Eigen::MatrixXf::Index max_index;
mat.col(i).maxCoeff(&max_index);
但是我希望有更好的方法可以一步完成所有这一切,而不是手动循环遍历每一列。这可能吗? (我使用的是Eigen v3.2.7)
答案 0 :(得分:2)
我在2012年的Eigen用户论坛上发现了一个post,这表明这是不可能的,并且在行/列上循环确实是最好的方法。
还没有更短的路要走。关于矢量化,
vec.maxCoeff()
是矢量化(标准缩减),但不是返回的版本 index:vec.maxCoeff(int&)
。这并非不可能,但我不指望 如果有任何重大收益。
我简要介绍了3.2.7代码库中的一些内容,并且自发布以来没有任何变化。