我试图使用EIGEN库。特别是我使用SVD。
计算奇异值后,我需要执行此操作:
svd.singularValues()/svd.singularValues().row(1)
是由标量潜入的矢量。
我的问题是:
1)为什么这个操作给了我:
main.cpp:149:56:错误:'operator /'不匹配(操作数类型是 'const SingularValuesType {aka const Eigen :: Matrix}'和 'Eigen :: DenseBase> :: ConstRowXpr {aka const Eigen :: Block,1,1,false>}')
2)如何将svd.singularValues().row(1)
中包含的值复制到标准" double"变量?
答案 0 :(得分:1)
请注意,svd.singularValues().row(1)
不是标量,而是1x1
矩阵,这就是您的代码无法编译的原因。解决方案:
svd.singularValues()/svd.singularValues()(1)
并且还注意到像往常一样在C / C ++中,Eigen的矩阵和向量是基于0的索引,所以如果你想用最大的奇异值进行归一化,你应该这样做:
svd.singularValues()/svd.singularValues()(0)