2016-10-03 8 views
1

Wie wird eine Spalte einer dynamischen Matrix um 1 erhöht, als eine In-Situ-Operation (ohne Erstellen von Kopien/Zwischenprodukten)?Eigenschrittsäule nach Eins

Versuch:

#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; 
} 

Antwort

2

fand ich einen Weg, dies zu tun. Aber ich weiß nicht, ob die Operation an Ort und Stelle ist.

Dies ist ähnlich 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; 
} 

Eine andere Möglichkeit, Feldoperation zu verwenden ist. Dieser Weg scheint besser zu sein (denke ich).

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

die 'Array()' Ansatz ist es, was ich empfehlen würde. Wenn Sie hauptsächlich elementweise vorgehen, sollten Sie A 'von Anfang an als' Eigen :: ArrayXXf 'speichern. Sie können später noch über die 'matrix()' Methode auf 'A' als Matrix zugreifen. – chtz

Verwandte Themen