2016-05-18 13 views
0

Я пытаюсь скомпилировать мой код, который имеет матричное умножение, с компилятором Intel C++. Для матричного умножения я использую библиотеку Eigen. Это пример кода. Я использую VS2013 с последней версией библиотеки Eigen.Компилятор Intel C++ и Eigen

#define EIGEN_USE_MKL_ALL 
#include <Eigen/Dense> 
using namespace Eigen; 

int main() 
{ 
    Matrix<double, 1, 200, RowMajor> y_pred; 
    y_pred.setRandom(); // Eigen library function 
    double learning_rate = 0.5; 
    cout << learning_rate * y_pred << endl; 
    return 1; 
} 

Когда я использую компилятор Intel C++ Я получаю следующее сообщение об ошибке:

1>error : more than one operator "*" matches these operands: 
1>    function "Eigen::operator*(const double &, const Eigen::MatrixBase<Eigen::Matrix<double, 1, 200, 1, 1, 200>> &)" 
1>    function "Eigen::operator*(const std::complex<double> &, const Eigen::MatrixBase<Eigen::Matrix<double, 1, 200, 1, 1, 200>> &)" 
1>    function "Eigen::internal::operator*(const float &, const Eigen::Matrix<std::complex<float>, -1, -1, 0, -1, -1> &)" 
1>    function "Eigen::internal::operator*(const float &, const Eigen::Matrix<std::complex<float>, -1, 1, 0, -1, 1> &)" 
1>    function "Eigen::internal::operator*(const float &, const Eigen::Matrix<std::complex<float>, 1, -1, 1, 1, -1> &)" 
1>    function "Eigen::internal::operator*(const float &, const Eigen::Matrix<Eigen::scomplex, -1, -1, 1, -1, -1> &)" 
1>    operand types are: float * Eigen::Matrix<double, 1, 200, 1, 1, 200> 
1>    y_pred = learning_rate * y_pred; 
+0

Похоже, ошибка компилятора для меня. 'Типы операндов: float * Eigen :: Matrix '. Почему он когда-либо думал о «плавании»? –

+0

Согласен! Я обмениваю операнды, и теперь это работает (y_pred * learning_rate). Разве это не странно? –

+0

Какую версию компилятора Intel вы используете? Я пробовал его с 16.0 и не видел эту ошибку. –

ответ

0

Вы можете явно выполнить скалярное вычисление:

cout << learning_rate * y_pred.array() << endl; 
+0

Спасибо за ответ. Но главный вопрос заключается в том, как заставить компилятор C++ работать (без повышения какой-либо ошибки), но Intel Compiler не справляется с этим. –

Смежные вопросы