代码之家  ›  专栏  ›  技术社区  ›  R zu

本征3方阵除以列阵

  •  0
  • R zu  · 技术社区  · 7 年前

    我想把一个正方形数组的每一行都分开( b )通过列数组的转置( a

    测试代码也处于 godbolt.org ,其中安装了eigen 3库。

    // before (a)
    2
    2
    2
    // before (b)
    2 2 2
    4 4 4
    6 6 6
    // after
    1 1 1
    2 2 2
    3 3 3
    

    #include <Eigen/Eigen>
    #include <iostream>
    using namespace Eigen;
    
    int main() {
        ArrayXXf a(3, 1);
        a << 2, 2, 2;
        ArrayXXf b(3, 3);
        b << 2, 2, 2, 4, 4, 4, 6, 6, 6;
        std::cout << a << "\n";
        std::cout << b << "\n";
        b.rowwise() /= a.transpose();
        std::cout << b << "\n";
    }
    

    ...
    error: static assertion failed: YOU_TRIED_CALLING_A_VECTOR_METHOD_ON_A_MATRIX
    ...
    

    相关问题:

    Eigen: Divide each row by last row

    1 回复  |  直到 7 年前
        1
  •  1
  •   ggael    7 年前

    断言告诉您使用的是矩阵(aka 2D array),而编译时向量(aka 1D array)是需要的。所以解决办法是 a 作为编译时1D数组:

    ArrayXf a(3);
    

    您还可以从标准线性代数中看到此操作:

    VectorXd a(3);
    MatrixXd b(3,3);
    b = b * a.asDiagonal().inverse();