2016-10-03 6 views
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