2017-12-14 1 views
1

私はNx3固有行列を持っています。 私はNx1 Egein marixを持っています。 Nx3の各行の係数乗算をNx1の対応するスケールで取得しようとしていますので、3Dベクトルの束をスケールすることができます。異なる形状の固有行列の正規乗算

私は明らかに何かを見落としていると確信していますが、動作させることはできません。

#include <Eigen/Dense> 

MatrixXf m(4, 3); 
m << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; 
MatrixXf dots(4, 1) 
dots << 2,2,2,2; 

私はそうのようなNx3のように行列を結果にしたい:

2,4,6 
8,10,12, 
14,16,18, 
20,22,24 

答えて

2

あなたは、放送使用することができます。

m = m.colwise().cwiseProduct(dots); 

するか、あなたがしたいすべてが不均一なスケーリングを適用することであることを確認:

m = dots.asDiagonal() * m; 

両方の式は、同様のコードを生成します。

+0

ありがとうggael。私はすべてのものをnumpyで動作させていましたが、すべてをEigenに変換しようとしています。アイゲンの良いチュートリアルを知っているとは思いませんか? –

+0

[manual](http://eigen.tuxfamily.org/dox/group__DenseMatrixManipulation__chapter.html)は良いスタートです;) – ggael

0

わかりましたので、私が働いて何かを得ました。私はおそらく何か間違っているが、これは私のために働いたので、私は分かち合うと思った。私は一週間前に私の最初の行のC++を書いたので、私はある程度の恵みに値します。より良い解決策を持つ人は誰でも投稿することをお勧めします。

// scalar/coefficient multiplication (not matrix) on Nx3 x N. For multiplying dot products by vectors 
void N3xNcoefIP(MatrixXf &A, MatrixXf &B) { 
    A.array() *= B.replicate(1, A.size()).array(); 
}