참고자료: https://dritchie.github.io/csci2240/assignments/eigen_tutorial.pdf
https://eigen.tuxfamily.org/dox/index.html
Computer vision및 Deep-learning관련 open-source들을 살펴보다보면, Eigen으로 작성된 코드들이 많이 보인다. 하지만 Eigen library가 정확히 어떤 기능을하고 어떻게 쓸 수 있는지 알지 못하기 때문에 코드를 이해하는데 어려움이 있었다. 이 글에서는 이 Eigen Library에 대해 공부한 내용에 대하여 작성한다.
이전글(Eigen3)에서 작성했던 기본 코드에 추가하여 Eigen라이브러리를 사용한 행렬 변수 연산에 대해 알아보도록 하겠다. Eigen은 파워풀한 선형대수 라이브러리 답게 행렬연산도 아주 간단하게 수행할 수 있다. 작성된 코드와 실행결과를 통해서 확인해 보도록 하겠다.
산술연산
Eigen으로 선언된 변수에 한해서는 일반 integer또는 float형태 자료형의 산술연산과 유사하게 수행할 수 있다.
#include <iostream>
#include <Eigen/Core>
#include <ros/ros.h>
using namespace std;
int main(int argc, char **argv)
{
ros::init(argc, argv, "eigen_test");
ros::NodeHandle nh;
ros::Rate rate(40.0);
//[-1,1]사이의 Uniform random 값을 갖는 4x4 행렬 선언
Eigen::Matrix4f M1 = Eigen::Matrix4f::Random();
//모든 elements가 2.2값을 가지는 4x4행렬 선언
Eigen::Matrix4f M2 = Eigen::Matrix4f::Constant(2.2);
//일반적인 행렬연산과 동일하게 행렬의 크기가 같아야 하고, 자료형이 같아야 한다.
cout << "Addition: \n" << M1 + M2 << endl;
cout << "Substraction: \n" << M1 - M2 << endl;
//행렬의 inner dimension의 크기가 같아야 하고, 자료형이 같아야 한다.
cout << "Multiplication: \n" << M1 * M2 << endl;
cout << "Complex op.: \n" << M2 - Eigen::Matrix4f::Ones()*2.2 << endl;
return 0;
};
실행 결과
행렬 연산
당연히 Transpose 및 Inverse도 지원한다.
//Trasposition
M1.transpose()
//Inversion(역행렬 계산을 위해서는 #include <Eigen/Dense> 추가해 준다.
//역행렬 계산이 불가할 때는 Nans 생성.
M1.inverse()
역행렬 계산이 불가능한 3x3 행렬 M1을 M1.inverse()로 연산 했을 때 실행 결과.
'Programming > Eigen' 카테고리의 다른 글
Eigen3 Vector (0) | 2020.07.01 |
---|---|
Eigen3 Matrices - 행렬변수 선언 (2) | 2020.07.01 |
Eigen3 란? (0) | 2020.06.09 |
댓글