C ++特征-如何结合广播和元素操作

问题描述 投票:5回答:1

我有一个MatrixXf变量和一个VectorXf变量。我想使用矩阵上的Vector进行按行除法。是否可以做这样的事情?

#include <iostream>
#include "Eigen/Dense"
using namespace std;
using namespace Eigen;

int main() {
    MatrixXf mat(3, 2);
    mat << 1, 2,
           3, 4,
           5, 6;
    VectorXf vec(2);
    vec << 2, 3;
    mat = mat.rowwise() / vec;
    cout << mat << endl;
    return 0;
}

我期望得到一个值[0.5,0.667; 1.5,1.333; 2.5,2]。

非常感谢!

c++ eigen
1个回答
8
投票

您需要将矩阵和向量用作数组(而不是线性代数对象,请参见docs)。为此,您可以将相关行重写为:

mat = mat.array().rowwise() / vec.transpose().array();
cout << mat << endl; // Note that in the original this was vec

transpose是必需的,因为根据定义,VectorXf是列向量,并且您需要行向量。

© www.soinside.com 2019 - 2024. All rights reserved.