2016-10-03 14 views
1

ダイナミックマトリックスの列を1段階で増分する方法(コピー/中間体を作成せずに)?固有値列を1つずつ増やす

試み:

#include <Eigen/Dense> 
#include <iostream> 
#include <stdint.h> 
int main(void){ 
    Eigen::MatrixXf A; 
    A = Eigen::MatrixXf::Random(3, 5); 
    std::cout << A << std::endl << std::endl; 
    A.col(1) = A.col(1)*2; //this works. 
    A.col(1) = A.col(1) + 1; //this doesn't work. 
    std::cout << A << std::endl; 
} 

答えて

2

私はこれを行う方法を発見しました。しかし、私は操作が適切かどうかはわかりません。

これはもう一つの方法は、アレイ動作を使用することであるeigen: Subtracting a scalar from a vector

#include <Eigen/Dense> 
#include <iostream> 
int main(void){ 
    Eigen::MatrixXf A; 
    A = Eigen::MatrixXf::Random(3, 5); 
    std::cout << A << std::endl << std::endl; 

    A.col(1) = A.col(1)*2; 
    A.col(1) = A.col(1) + Eigen::VectorXf::Ones(3); 
    std::cout << A << std::endl; 
} 

と同様です。このようにしてみればよかったと思います。 `配列()`アプローチを使用

https://eigen.tuxfamily.org/dox/group__TutorialArrayClass.html

#include <Eigen/Dense> 
#include <iostream> 
int main(void){ 
    Eigen::MatrixXf A; 
    A = Eigen::MatrixXf::Random(3, 5); 
    std::cout << A << std::endl << std::endl; 

    A.array() += 1; 
    A.col(1).array() += 100; 

    std::cout << A << std::endl; 
} 
+2

私が推薦するものです。主に要素単位の操作を行う場合は、最初から 'Aigen'を' Eigen :: ArrayXXf'として保存することを検討してください。 'matrix()'メソッドを使って 'A'に行列としてアクセスすることができます。 – chtz

関連する問題