特征增量列1

Eigen Increment Column by One

本文关键字:特征      更新时间:2023-10-16

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

我找到了一个方法。但我不知道操作是否到位。

这类似于本征:从向量

减去一个标量
#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;
}