C'è un modo semplice per valutare colonna prodotto scalare saggio di 2 matrici (lascia chiamarli A
e B
, di tipo Eigen::MatrixXd
) che hanno dimensioni mxn
, senza valutare A*B
o senza dover ricorrere ai cicli for
? Il vettore risultante avrebbe bisogno di avere dimensioni di 1xn
o nx1
. Inoltre, sto cercando di fare questo con Eigen in C++colonna-saggio Eigen C++
6
A
risposta
0
Ecco come lo farei con una Eigen::Map
(assumendo matrici reali, può estendersi a complesse tramite prendendo l'aggiunto), dove rows
e cols
denotano il numero di righe/colonne:
#include <Eigen/Dense>
#include <iostream>
int main()
{
Eigen::MatrixXd A(2, 2);
Eigen::MatrixXd B(2, 2);
A << 1, 2, 3, 4;
B << 5, 6, 7, 8;
int rows = 2, cols = 2;
Eigen::VectorXd vA = Eigen::Map<Eigen::VectorXd>(
const_cast<double *>(A.data()), rows * cols, 1);
Eigen::VectorXd vB = Eigen::Map<Eigen::VectorXd>(
const_cast<double *>(B.data()), rows * cols, 1);
double inner_prod = (vA.transpose() * vB).sum();
std::cout << inner_prod << std::endl;
}
5
ci sono molti modi per raggiungere questo, tutta l'esecuzione di valutazione pigra:
res = (A.array() * B.array()).colwise().sum();
res = (A.cwiseProduct(B)).colwise().sum();
E il mio preferito:
res = (A.transpose() * B).diagonal();
Problemi correlati
- 1. Eigen MatrixXd respinge in C++
- 2. Cast Eigen :: MatrixXd a Eigen :: MatrixXf
- 3. C++ Eigen inizializza la matrice statica
- 4. è possibile utilizzare Eigen con c?
- 5. Come convertire Eigen :: Matrix4f in Eigen :: Affine3f
- 6. Boost :: uBLAS vs Eigen
- 7. Problemi di allineamento di Eigen
- 8. Spostare la semantica in Eigen
- 9. Eigen e std :: vector
- 10. Eigen affinamento booleano array
- 11. Foreach loop su matrici Eigen?
- 12. chiamata C++ utilizzando la funzione Eigen Biblioteca in python
- 13. Crea un Eigen Matrix da una matrice C
- 14. Mappare una matrice Eigen a un array C
- 15. Matrice cross-product in Eigen
- 16. Matrice di rotazione in Eigen
- 17. Eigen Convert Matrix to Vector
- 18. Come fare operazioni colwise in Eigen
- 19. Risultati errati usando auto con Eigen
- 20. Utilizzando Eigen Biblioteca con OpenCV 2.3.1
- 21. Analisi componenti principale con Eigen Library
- 22. Conversione di una trasformazione affine Eigen in una trasformazione isometrica Eigen
- 23. Come estrarre un subvector (di un Eigen :: Vector) da un vettore di indici in Eigen?
- 24. Come inizializzare uno SparseVector in Eigen
- 25. Inizializzazione Eigen :: vector con std :: vector
- 26. come concatenare i vettori in Eigen?
- 27. Matrice di puntatori a Eigen Matrices
- 28. colonna Append alla matrice, utilizzando Eigen libreria
- 29. typecasting Eigen :: VectorXd a std :: vector
- 30. OpenCV CV :: Mat ed Eigen :: Matrix
Moltiplica l'elemento, quindi somma? In MATLAB sarebbe 'somma (A. * B)'. Eigen fornisce tali operazioni, ma non conosco i nomi esatti delle chiamate. –
bello! Questo dovrebbe funzionare Grazie! – Zedd
È possibile utilizzare un "Eigen :: Map" per rimodellare le matrici in vettori, quindi prendere il loro prodotto interno. – vsoftco