【发布时间】:2014-12-03 10:48:24
【问题描述】:
我正在尝试使用 Eigen 编写一个函数,该函数将一个对角矩阵反转,与通常情况略有不同。当对角线元素为零(或相对接近于零)时,应将对角线元素的值设置为零,否则该值应为 1/(对应元素)。我试图编写一个函数来接收我想要反转的对角矩阵(它实际上是一个 nx1 矩阵,因此得名)和另一个指针,我希望将结果放入其中:
template <typename m1, typename m2>
void invertSingularValues(Eigen::EigenBase<m1>& sing_val_vector,Eigen::EigenBase<m2>& res)
{
for (int i=0; i<sing_val_vector.rows();i++)
res(i,i)=(sing_val_vector[i]<0.0000001?0:1/sing_val_vector[i]);
};
似乎我无法使用 (i,j) 或 [i] 访问矩阵的元素,因为我收到了以下错误:
'operator[]' 不匹配(操作数类型为'Eigen::EigenBase >' 和'int') res(i,i)=(sing_val_vector[i]
'operator[]' 不匹配(操作数类型为'Eigen::EigenBase >' 和'int') res(i,i)=(sing_val_vector[i]
调用“(Eigen::EigenBase >) (int&, int&)”不匹配 res(i,i)=(sing_val_vector[i]
当我这样调用函数时:
invertSingularValues(S.data,S_inv);
S.data 和 S_inv 是特征矩阵。 我能做什么?
【问题讨论】: