2016-04-25 90 views
4

我有一個MatrixXf變量和一個VectorXf變量。我想使用我的矩陣上的矢量進行行劃分。是否有可能做這樣的事情?本徵矩陣廣播操作

#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]。

非常感謝!

回答

6

您需要使用矩陣和向量作爲數組(而不是線性代數對象,請參見docs)。要做到這一點,你就會改寫爲相關線路:

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

需要的transposeVectorXf被定義的列向量,和你想一個行向量。

+0

這解決了我上面的問題。雖然我有另一個廣播問題。可以根據文檔對+和 - 執行廣播操作,而不需要.array()語法。爲什麼我需要使用array()方法進行乘法和除法? – yc2986

+0

@ yc2986引用文檔時,「Array類提供了通用數組,而不是用於線性代數的Matrix類」。加法和減法是爲線性代數定義的操作(參見[Wikipedia](https://en.wikipedia.org/wiki/Matrix_%28mathematics%29#Basic_operations)),而係數明智地乘法和除法矩陣或向量不是。 –