2016-02-11 1 views
0

Я хочу расширить и наложить массивы, как показано ниже.Перезапись и расширение массива или матрицы без определения размера в Eigen

Пример (массив А. & В):

A= 1 2 
     4 8 

B = -1 -2 
    -3 -4 

Результат (overwrting В на А из A.row (1)):

C= 1 2 
    -1 -2 
    -3 -4 

Ниже кода определяет размер матрицы перед ним создает и не может перезаписывать другую матрицу.

#include <iostream> 
#include <stdlib.h> 
#include <Eigen/Dense> 
int main (int argc, char * argv []) 
{ 
    MatrixXd m (2, 2); 
    m << 1, 2, 4, 8; 
    MatrixXd n (2, 2); 
    n << -1, -2, -3, -4; 
    MatrixXd k (4, 2); 
    k << 
     m, 
     n; 

    std::cout << k << std::endl; 

    return EXIT_SUCCESS; 
} 

Есть ли способ, чтобы получить результат без определения размера (т.е. без этого: k (4, 2);)?

ответ

1

Вы можете сделать то, что задали в первой части своего вопроса, используя block operations. Например, вы можете изменить ваш пример, чтобы быть

#include <iostream> 
#include <Eigen/Core> 
int main() 
{ 
    Eigen::MatrixXd m (2, 2); 
    m << 1, 2, 4, 8; 
    Eigen::MatrixXd n (2, 2); 
    n << -1, -2, -3, -4; 
    Eigen::MatrixXd c (3, 2); 
    std::cout << c << "\n\n"; 
    c.topRows(2) = m; 
    std::cout << c << "\n\n"; 
    c.bottomRows(2) = n; 

    std::cout << c << "\n\n"; 

    return 0; 
} 

Вы можете использовать более общий block() или использовать specific blocks, как я.

Относительно того, можете ли вы пропустить определение размеров матрицы (k (4, 2);), ответ на самом деле не является, если вы не назначили матрицу правильных размеров, и в этом случае размер неявный.

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