2017-03-11 1 views
2

일부 Matlab 코드를 C++로 변환.Matlab에서 C++까지 고유 행렬 연산 - 벡터 정규화

질문 (방법 C++에서 행) 매트릭스

  1. 연결할 두 벡터.

    % 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++ 코드 : 3 차 값

매트랩 1 코드 및 2로 나누어

  • 표준화 각 배열 ("PTS"COL) (이미 해결책을 발견) 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

    @ 피터, 문제는 matlab에서했던 것처럼 한 줄에 B를 채우는 것입니다. 솔루션은 B << d0 * (* A), (d0 + d1) * (* A) 일 수 있다고 생각합니다. 그러나 나는 아직 그것을 시험하지 않았다. – Pedro77

    +0

    Matlab은 고급 언어이고 C++은 하위 레벨입니다. Matlab의 한 줄이 C++의 한 줄과 일치한다는 기대는 합리적이지 않습니다. 각기 다른 장단점이 있습니다. – Brick

    답변

    2

    :

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

    전용 어레이는 행과 열의 부분 감소 정의 곱셈과 나눗셈 연산자를 가지고있다. 배열을 다시 할당하면 배열이 다시 매트릭스로 변환됩니다. C