Eigen C++列除法操作报错:rowwise()赋值失败求解
问题分析与解决方案
你的代码错误源于误用rowwise()且未使用逐元素运算接口,导致Eigen的表达式模板无法正确推导类型。
Eigen中,矩阵默认的+、/是矩阵代数运算,而你需要的是逐元素的比值计算,必须通过array()方法切换到数组运算模式。rowwise()用于逐行的矩阵级操作(比如每行与向量做广播运算),在这里会打乱表达式的维度匹配逻辑,触发模板推导错误。
正确代码写法
直接使用array()实现逐元素运算:
df.col(0) = df.col(1).array() / (df.col(1).array() + df.col(2).array());
或者更简洁的形式:
df.col(0) = df.col(1).array() / (df.col(1) + df.col(2)).array();
原理说明
调用array()后,所有运算会转为逐元素执行:
df.col(1).array()将列向量转为数组视图df.col(1).array() + df.col(2).array()执行逐元素相加,得到每行的col1+col2结果- 逐元素除法后得到的数组视图可直接赋值给
df.col(0)(Eigen会自动适配矩阵/数组类型)
内容的提问来源于stack exchange,提问作者Nicolas REY
相关产品推荐
相关产品推荐

