2016-10-03 23 views
1

如何将动态矩阵的列增加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

使用'阵列()'方法是什么,我会推荐。如果您主要在做元素操作,请考虑从头开始将'A'存储为'Eigen :: ArrayXXf'。稍后您仍然可以通过'matrix()'方法访问'A'作为矩阵。 – chtz