簡體   English   中英

為什么 Eigen 的對角線 ().row() 上的 std:sqrt 因“沒有重載 function 的實例與參數列表匹配”而失敗

[英]Why does std:sqrt on Eigen's diagonal().row() fail with "no instance of overloaded function matches argument list"

我正在嘗試計算 Eigen::Matrix3d 的.diagonal() 的每個元素的平方根。 使用

std::sqrt(matrix.diagonal().row())

會給我一個編譯錯誤:

沒有重載 function "std::sqrt" 與參數列表匹配的實例——參數類型為:(Eigen::Block<Eigen::Diagonal<Eigen::Matrix<double, 3, 3, 0, 3, 3>, 0>, 1, 1, 假>)C/C++(304)

我在 for 循環中使用 .row() 來訪問對角向量的每一行。 .diagonal() 向量的每個元素都應該是 double 類型。

我正在使用指針取消引用 - 但是當我打印 the.row() 時它可以工作。

我猜問題出在 sqrt 和 from.row() 的返回值之內。 我究竟做錯了什么?

編輯: .diagonal().array().sqrt() 可以解決問題。

這是因為matrix.diagonal().row(n)的結果類型是一一矩陣。 您可以使用.value()成員 function 將其轉換為平面類型:

#include <iostream>
#include <Eigen/Dense>

int main()
{
    Eigen::Matrix3f m;
    m << 1, 2, 3,
         4, 5, 6,
         7, 8, 9;

    std::cout << std::sqrt( m.diagonal().row(1).value() ) << "\n";

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM