2017-06-06 44 views
0

我正在尝试使用EIGEN库。特别是我正在使用SVD。Eigen SVD双铸

我需要执行此操作的奇异值的计算之后:

svd.singularValues()/svd.singularValues().row(1) 

它是由一个标量跌的载体。

我的问题是:

1)为什么这种操作给我:

main.cpp:149:56: error: no match for ‘operator/’ (operand types are ‘const SingularValuesType {aka const Eigen::Matrix}’ and ‘Eigen::DenseBase >::ConstRowXpr {aka const Eigen::Block, 1, 1, false>}’)

2)我怎样才能复制到包含在标准的 “双” 变量svd.singularValues().row(1)值是多少?

回答

1

请注意,svd.singularValues().row(1)不是一个标量,而是一个1x1矩阵,这就是为什么你的代码不能编译。解决方案:

svd.singularValues()/svd.singularValues()(1) 

也注意到,在C/C++往常一样,艾根的矩阵和向量是基于0的索引,所以如果你想用最大的奇异值恢复正常,你应该做的:

svd.singularValues()/svd.singularValues()(0)