2015-11-03 4 views
1

Я новичок в Eigen, и я хотел бы создать 10 mxn матриц. По некоторым причинам я сделать это с помощью следующего метода:Подматрица с полосой в собственной библиотеке

Matrix<double, m, n*10> 

Который, кажется, что распределение памяти будет выглядеть следующим образом:

_______________________________________________________________ 
|M1(1,1)|M2(1,1)|...|M10(1,1)|.....|M1(1,n)|M2(1,n)|...|M10(1,n)| 
| . .               | 
| .               | 

Теперь, как можно создать эталонную матрицу (означает ссылки и без копирования данных) к каждой из этих 10 матриц?

ответ

2

Я бы рекомендовал использовать динамически распределенную матрицу, так как m и n могут быть большими. Кроме того, кажется, что вы предполагаете, что матричная память имеет большое значение строки, когда по умолчанию используется значение столбца. В приведенном ниже примере я явно сделал их строковыми.

Вы можете использовать ряд Eigen::Map<MatrixXd> s так:

#include <Eigen/Core> 
#include <iostream> 

using namespace Eigen; 

int main(void) 
{ 
    int m = 3; 
    int n = 4; 
    int x = 6; 
    typedef Matrix < double, Dynamic, Dynamic, RowMajor > ourMat; 
    ourMat M1(m, n * x); 
    M1.setConstant(9.9); 

    for (int i = 0; i < x; i++) 
    { 
     Eigen::Map<ourMat, 0, Stride<Dynamic, Dynamic>> m_i(M1.data() + i, 
                  m, n, 
            Stride<Dynamic, Dynamic>(n*x,x)); 
     m_i.setConstant(double(i)); 
     std::cout << m_i << std::endl; 
     std::cout << M1 << "\n" << std::endl; 

    } 

    Eigen::Map<VectorXd> m_i(M1.data(), m * n * x); 
    std::cout << m_i.transpose() << std::endl; 

    return 0; 
} 
+0

Благодаря этому есть ответ, который я ищу –

Смежные вопросы