Giriş
Eigen kütüphanesi ile linklemek gerekmez. Açıklaması şöyle
Şu satırlar dahil edilir.
Şöyle yaparız.
constructor - buffer
Constructor
Giriş
Dense isim alanındaki tüm matrislerin atasıdır. Bu sınıf genelde gerçek matrisi template koda geçerken kullanılır.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
operator * metodu
operator << metodu
Giriş
Eigen Vector ve std::vector arasındaki farkın açıklaması şöyle
Eigen kütüphanesi ile linklemek gerekmez. Açıklaması şöyle
SparseMatrix İsim AlanıEigen is only a compile-time dependency for your project. No need to redistribute, or ask your user to install, any library.
Şu satırlar dahil edilir.
#include <Eigen/Sparse>
Şu alan adı dahil edilir.using namespace Eigen;
ConstructorŞöyle yaparız.
SparseMatrix<double> m
(50, 50, 0.1);
setFromTriplets metodu
Şöyle yaparız.
DenseMatrix İsim Alanı
Şu satırlar dahil edilir.
resize metodu;
Şöyle yaparız.
Eigen::SparseMatrix<double> m = ...;
typedef Eigen::Triplet<double> T;
std::vector<T> v = ...;
m.setFromTriplets(v.begin(),v.end());
DenseMatrix İsim Alanı
Şu satırlar dahil edilir.
#include <Eigen/Dense>
Şu alan adı dahil edilir.using namespace Eigen;
Array Sınıfıresize metodu;
Şöyle yaparız.
Eigen::Array<float, Eigen::Dynamic, Eigen::Dynamic> arr;
arr.resize(6, 6)
LLT Sınıfı
constructor
Şöyle yaparız.MatrixXd A(3,3);
A << 4,-1,2, -1,6,0, 2,0,5;
LLT<MatrixXd> lltOfA(A);
MatrixXd L = lltOfA.matrixL();
MatrixXd U = lltOfA.matrixU();
Map Sınıfıconstructor - buffer
Şöyle yaparız.
boost::iostreams::mapped_file file("foo.bin");
const std::size_t rows = 163840;
const std::size_t columns = 163840;
if (rows * columns * sizeof(float) > file.size()) {
...
}
Eigen::Map<Eigen::MatrixXf> matrix(reinterpret_cast<float*>(file.data()), rows, columns);
std::cout << matrix(0, 0) << ' ' << matrix(rows - 1, columns - 1) << std::endl;
matrix(0, 0) = 0.5;
matrix(rows - 1, columns - 1) = 0.5;
EigenSolver SınıfıConstructor
Şöyle yaparız.
Örnek
MatrixXd data = ...;
EigenSolver<MatrixXd> es (data,false);
eigenValue metodu
Şöyle yaparız.Vector2cd output = es.eigenvalues();
IOFormat SınıfıÖrnek
Elimizde bir vector olsun
Vector3i foo = ...;
Şöyle yaparız.
IOFormat Fmt(3, 0, "\t", "\n", "", "");
cout << foo.format(Fmt) << endl;
MatrixBase SınıfıGiriş
Dense isim alanındaki tüm matrislerin atasıdır. Bu sınıf genelde gerçek matrisi template koda geçerken kullanılır.
Örnek
Şöyle yaparız.
template <typename Derived>
void print_cond(const MatrixBase<Derived>& a) {...}
operator ==
İmzası şöyle
Bu sınıf aslında bir typedef. Şöyle yaparız.
Giriş
Şu satırı dahil ederiz.
Template tanımlarken paramatre olarak T tipi, satır ve sütun sayısı alır.
Örnek
Şöyle yaparız.
bool operator== (const MatrixBase< OtherDerived > & other) const
Açıklaması şöyle.Matrix3i SınıfıReturns true if each coefficients of *this and other are all exactly equal. Warning When using floating point scalar values you probably should rather use a fuzzy comparison such as isApprox() See Also isApprox(), operator!=
Bu sınıf aslında bir typedef. Şöyle yaparız.
Matrix3i T;
T << 1, 0, 0,
0, 2, 0,
0, 0, 3;
Matrix SınıfıGiriş
Şu satırı dahil ederiz.
using Eigen::Matrix;
TanımlamaTemplate tanımlarken paramatre olarak T tipi, satır ve sütun sayısı alır.
Örnek
Şöyle yaparız.
#include <iostream>
#include "Eigen/Dense"
using namespace Eigen;
using T = double;
const int rows = 5;
const int cols = 3;
template<typename Derived>
void print_cond(const MatrixBase <Derived> &a) {
/* We want to enforce the shape of the input at compile-time */
static_assert(rows == Derived::RowsAtCompileTime);
static_assert(cols == Derived::ColsAtCompileTime);
/* Now that we are guaranteed that we have the
* correct dimensions, we can do something... */
std::cout << a;
}
int main() {
print_cond(Matrix<T, rows, cols>::Ones());
/* These will not compile */
// print_cond(Matrix<T, rows + 1, cols>::Ones());
// print_cond(Matrix<T, rows, cols + 1>::Ones());
// print_cond(Matrix<T, rows + 1, cols + 1>::Ones());
return 0;
}
Constructor
Şöyle yaparız.
Şöyle yaparız.
Matrix<double, 2, 2> m;
Ones metoduŞöyle yaparız.
using T = double;
const int rows = 5;
const int cols = 3;
auto m =(Matrix<T, rows, cols>::Ones();
operator () metodu
Şöyle yaparız.
m(0, 0) = 1;
m(0, 1) = 1;
m(1, 0) = 1;
m(1, 1) = 1;
operator + metoduŞöyle yaparız.
Matrix<Interval, 2, 2> m1;
m1 = m + m; //this works
operator - metoduŞöyle yaparız.
Matrix<Interval, 2, 2> m1;
m1 = m - m; //this works
Şöyle yaparız.
Constructor - size
Matrix<double, 2, 2> m1;
m1 = m*m; //this works
MatrixXd Sınıfı
Giriş
Tanımı şöyle. Dynamic kelimesi boyutların derleme esnasında belli olmadığını gösterir.
Şöyle yaparız.Tanımı şöyle. Dynamic kelimesi boyutların derleme esnasında belli olmadığını gösterir.
typedef Matrix<double, Dynamic, Dynamic> MatrixXd;
Constructor - defaultMatrixXd m
Şöyle yaparız.
2x2 büyüklüğünde bir yeni matris verir. 0. sütun, 0. satırdan başlar. Şöyle yaparız.
Coefficient wise anlamına gelir. Şöyle yaparız.
Hem getter hem de setter olarak kullanılabilir. Şöyle yaparız.
Eigen::MatrixXd m (2,2);
block metodu2x2 büyüklüğünde bir yeni matris verir. 0. sütun, 0. satırdan başlar. Şöyle yaparız.
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl;
MatrixXd mx(4,4);
mx.block<2,2>(0,0) << m;
mx.block<2,2>(2,2) << m;
std::cout << mx << std::endl;
cwise metoduCoefficient wise anlamına gelir. Şöyle yaparız.
Eigen::MatrixXd& X = ...;
// take the square of all entries and find max of each row
Eigen::MatrixXd X2 = X.cwise().pow(2);
Eigen::VectorXd max_values = X2.rowwise().maxCoeff();
operator () metoduHem getter hem de setter olarak kullanılabilir. Şöyle yaparız.
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl;
operator << metodu
2x2 matris için şöyle yaparız.
using Matrix = Eigen::Matrix<Interval, 2, 2>;
Matrix m;
m <<
Interval {0.0, 1.0},
Interval {0.0, 0.0},
Interval {0.0, 0.0},
Interval {0.0, 1.0};
MatrixXf Sınıfı
Örnek
Şöyle yaparız.
Şöyle yaparız.
MatrixXf m(4,4);
Örnek
OpenCV matrix nesnesinden kurmak için şöyle yaparız.
Şöyle yaparız.
OpenCV matrix nesnesinden kurmak için şöyle yaparız.
cv::Mat1f codes;
...
Eigen::MatrixXf m = Eigen::MatrixXf(codes.rows,codes.cols);
cv::cv2eigen(codes, m);
ÖrnekŞöyle yaparız.
Eigen::MatrixXf m = Eigen::MatrixXf::Random(3,3); //this is OK
Bu çağrıdan önce şöyle yapmak gerekebilir.std::srand((unsigned int) time(0));
block metodu
2x2 büyüklüğünde bir yeni matris verir. 0. sütun, 1. satırdan başlar. Şöyle yaparız.
cout<<m.block<2,2>(0,1)<<std::endl;
operator * metodu
Şöyle yaparız
int mult_float(const Eigen::MatrixXf& A, Eigen::MatrixXf& B)
{
Eigen::MatrixXf C= A*B;
return C(0,0);
}
Şöyle yaparız.
MatrixXf m(4,4);
m << 1 , 2 , 3 , 4,
5 , 6 , 7 , 8,
9 , 10, 11, 12,
Şöyle yaparız
int mult_int(const Eigen::MatrixXi& A, Eigen::MatrixXi& B)
{
Eigen::MatrixXi C= A*B;
return C(0,0);
}
VectorXd SınıfıGiriş
Eigen Vector ve std::vector arasındaki farkın açıklaması şöyle
Classes in Eigen represent mathematical objects. In this case, a mathematical vector, with all the typical operations on vectors, like multiplication with a matrix or scalar product.Constructor
std::vector is essentially an (dynamic) array, storing a list of data in consecutive space. Typical operations would be appending data or sorting it.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
int size = 100;
Eigen::VectorXd v(size);
Constructor - std::vectorŞöyle yaparız.
vector<int> ids = {1, 3, 0, 20};
Eigen::VectorXd v(ids);
setRandom metoduŞöyle yaparız.
int size = 100;
Eigen::VectorXd v(size);
v.setRandom(size);
VectorXf Sınıfı
Constructor
Şöyle yaparız.
VectorXf v(10
);
Random metodu
Rastgele sayı ile doldurmak için şöyle yaparız.
Rastgele sayı ile doldurmak için şöyle yaparız.
VectorXf v =VectorXf::Random(n2);
replicate metodu
Elimizde bir vector olsun
Elimizde bir vector olsun
Eigen::VectorXf vec(5);
vec << 1, 2, 3, 4, 5;
Şöyle yaparız.MatrixXf tmp = vec.replicate(1, 3).transpose();
Her elemeanı 3 kere çoklayarak matrix haline getirir.//(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5)^T