Da Matlab a C ++ Operazioni con matrici Eigen – Normalizzazione vettoriale

Convertire un codice Matlab in C ++.

Domande (come in C ++):

  1. Concatena due vettori in una matrice. (già trovato la soluzione)

  2. Normalizza ogni array (“pts”) dividendolo per il suo terzo valore

Codice Matlab per 1 e 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,:)); 

Codice C ++ per 1 e 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(0,i) = C.block(0,i)/C(0,i); } 

Edit: Spero che la domanda sia più chiara ora².

Per # 2:

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

Solo gli array dispongono di operatori di moltiplicazione e divisione definiti per riduzioni parziali di righe e colonne. L’array converte nuovamente in una matrice quando lo si riassegna in C