2015-08-05 2 views
2

Я пытаюсь напечатать матрицу на код screen.My:ошибка: недопустимые типы для индексов массивов

#include <vector> 
#include <algorithm> 
#include <cmath> 
#include <eigen2/Eigen/Core> 

int main() { 
    std::vector<int> items = {1,2,3,4,5,6,7,8,9,10,11,12,18}; 

    // generate similarity matrix 
    unsigned int size = items.size(); 
    Eigen::MatrixXd m = Eigen::MatrixXd::Zero(size,size); 

    for (unsigned int i=0; i < size; i++) { 
     for (unsigned int j=0; j < size; j++) { 
      // generate similarity 
      int d = items[i] - items[j]; 
      int similarity = exp(-d*d/100); 
      m(i,j) = similarity; 
      m(j,i) = similarity; 
     } 
    } 
     for (unsigned int i=0; i < size; i++) { 
     for (unsigned int j=0; j < size; j++) { 
      std::cout << m[i][j]; 
     } 
    std::cout << std::endl; 
    } 
    return 0; 
} 

Когда я компилирую я получил это:

pex.cpp: In function ‘int main()’: 
pex.cpp:25:31: error: invalid types ‘Eigen::ei_traits<Eigen::Matrix<double, 10000, 10000> >::Scalar {aka double}[unsigned int]’ for array subscript 
      std::cout << m[i][j]; 

Почему я недопустимые типы здесь? Или есть другой способ распечатать контент на экране? Мой код будет намного больше в будущем, поэтому я хочу проверить вычисления на каждом шаге.

+1

Вы использовали 'm (i, j)' выше, это что? – Quentin

+0

@Quentin Вероятно http://eigen.tuxfamily.org/dox-2.0/TutorialCore.html#TutorialCoreMatrixTypes – cnicutar

+0

Да, я использую Eigen template library. –

ответ

3

Нет ли an operator для отображения матрицы без необходимости писать петли вручную?

std::cout << m << std::endl; 

В противном случае, вы, вероятно, хотите назвать operator() не operator[]:

std::cout << m(i, j); 

не так ли?

+0

Это должен быть комментарий – Nishant

+0

@Nishant: why? Отображение матрицы сразу - это то, что показано в [учебнике] (http://eigen.tuxfamily.org/dox/GettingStarted.html) – Arkanosis

+0

@ Арканоз Да, он отлично работает с отображением оператора, мне не нужен цикл , –

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