Eigen 中最大系数的索引(按列)
Index of max coefficient (column wise) in Eigen
在 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)
我在 2012 年的 Eigen 用户论坛上发现了一个 post 提示这是不可能的,并且循环 rows/columns 确实是最好的方法。
There is no shorter way yet. Regarding vectorization, vec.maxCoeff()
is vectorized (standard reduction), but not the version returning the
index: vec.maxCoeff(int&)
. It's not impossible but I'd not expect
significant gain if any.
我简单地浏览了一些 3.2.7 代码库,自 post 以来似乎没有任何变化。
在 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)
我在 2012 年的 Eigen 用户论坛上发现了一个 post 提示这是不可能的,并且循环 rows/columns 确实是最好的方法。
There is no shorter way yet. Regarding vectorization,
vec.maxCoeff()
is vectorized (standard reduction), but not the version returning the index:vec.maxCoeff(int&)
. It's not impossible but I'd not expect significant gain if any.
我简单地浏览了一些 3.2.7 代码库,自 post 以来似乎没有任何变化。