2017-03-11 8 views
2

一部のMatlabコードをC++に変換します。MatlabからC++へ固有行列演算 - ベクトル正規化

質問(方法C++での):

  1. を連結マトリックス内の2つのベクター。

    % 1. A 3x1 vector. d0, d1 double. 
    B = [d0*A (d0+d1)*A]; % B is 3x2 
    
    % 2. Normalize a set of 3D points 
    % Divide each col by its 3rd value 
    % pts 3xN. C 3xN. 
    % If N = 1 you can do: C = pts./pts(3); if not: 
    C = bsxfun(@rdivide, pts, pts(3,:)); 
    

    ためのC++コード:正規化は、各アレイ( "PTS" COL)が

1および2のためのMATLABコードの3番目の値で割ること

  • (既に解決策を見つけました) 1および2:

    // 1. Found the solution for that one! 
    B << d0*A, (d0 + d1)*A; 
    
    // 2. 
    for (int i=0, i<N; i++) 
    { 
        // Something like this, but Eigen may have a better solution that I don't know. 
        C.block<3,1>(0,i) = C.block<3,1>(0,i)/C(0,i); 
    } 
    

    編集: 私は質問をより明確now²であると思います。 #2の

  • +0

    これはEigenのために作られたものです。あなたはどんな問題を抱えていますか? – Peter

    +1

    @Peter、問題は私がmatlabで行ったように、1行でBを埋めることです。私は解がB << d0 *(* A)、(d0 + d1)*(* A)であると考えます。私はまだそれをテストしていない。 – Pedro77

    +0

    Matlabは高水準言語であり、C++は低水準です。 Matlabの1行がC++の1行に対応すると期待しているのは妥当ではありません。あなたは、それぞれ異なる賛否両論を持っています。 – Brick

    答えて

    2

    C = C.array().rowwise()/C.row(2).array(); 
    

    のみアレイは、行と列部分の削減のために定義された乗算および除算演算子を持っています。 C

    関連する問題