2011-04-04 14 views
6

¿alguien puede dar un ejemplo de cómo usar el producto uBLAS para multiplicar las cosas? O si hay una biblioteca de matriz de C++ más agradable que puedas recomendar, también me gustaría recibirla. Esto se está convirtiendo en un gran dolor de cabeza.Boost uBLAS matriz/producto vectorial

Aquí está mi código:

vector<double> myVec(scalar_vector<double>(3)); 
matrix<double> myMat(scalar_matrix<double>(3,3,1)); 
matrix<double> temp = prod(myVec, myMat); 

Aquí está el error:

cannot convert from 'boost::numeric::ublas::matrix_vector_binary1<E1,E2,F>' to 'boost::numeric::ublas::matrix<T>' 

he agotado mi búsqueda. Stackoverflow tiene una pregunta sobre este here. La documentación de Boost tiene un ejemplo here. He copiado el código del ejemplo, pero no me sirve porque la magia de la plantilla que funciona para stdout me resulta inútil.

#include <boost/numeric/ublas/matrix.hpp> 
#include <boost/numeric/ublas/io.hpp> 

int main() { 
    using namespace boost::numeric::ublas; 
    matrix<double> m (3, 3); 
    vector<double> v (3); 
    for (unsigned i = 0; i < std::min (m.size1(), v.size()); ++ i) { 
     for (unsigned j = 0; j < m.size2(); ++ j) 
      m (i, j) = 3 * i + j; 
     v (i) = i; 
    } 

    std::cout << prod (m, v) << std::endl; 
    std::cout << prod (v, m) << std::endl; 
} 

Respuesta

3

No he mirado mucho en uBLAS Boost, pero Eigen seguro que es bueno, y tiene un buen rendimiento también.

+0

Gracias, voy a echar un vistazo. Guau. Realmente me gusta esto hasta ahora. Pasé un tiempo buscando en Google la biblioteca de matriz, pero esto no surgió. Por lo general, obtienes LAPACK ++ MTL en los resultados y en otros. A veces no tienen licencia abierta. A veces no son elegantes. – Budric

9

El producto de un vector y una matriz es un vector, no una matriz.

+0

Sí, eso funciona. Aunque no veo por qué no puede funcionar para una matriz de 1x3 también. – Budric

+0

Lo haría, pero tendría que declararlo como una matriz. Creo que el problema radica en la flexibilidad que Boost intenta brindar al tiempo que solo utiliza archivos de encabezado. En algunos casos, es demasiado difícil de usar y las complejidades de la plantilla te vuelven loco. – JCooper

+0

Eso es lo que encuentro sobre Boost. Creo que la biblioteca Eigen (solo encabezados) logró establecer un buen equilibrio entre plantillas, velocidad y usabilidad. Así que voy con esa solución en lugar de usar Boost uBLAS. – Budric

Cuestiones relacionadas