Взятие входных данных клавиатуры для переменных матричного типа в Armadillo C ++

Я не могу использовать ввод с клавиатуры для установки значений переменных векторного или матричного типа, определенных с помощью библиотеки Armadillo. Это код, который я использую.

#include <iostream>
#include "armadillo"
using namespace arma;
using namespace std;
int main()
{
   vec mu1;
   cin>> mu1;
   return 0;
}

Я получаю следующее сообщение об ошибке

"E: \ cpp \ hell \ mvnsamp.cpp | 18 | ошибка: нет соответствия для 'operator >>' (типы операндов: 'std :: istream {aka std :: basic_istream}' и 'arma :: vec {aka arma :: Col} ') "

Пытается ввести значения одно за другим, используя cin >> mu1 (i). Я также попытался принять ввод в виде массива, а затем назначить элементы mu1.

float arr[20]={};
for(int i=0;i<5;i++)
{
     cin>> arr[i];
}
 mu1(0)=arr[0];

Это дало ошибку в окне вывода

«ошибка: Mat :: operator (): завершение индекса за пределами границ вызывается после выброса экземпляра ошибки std :: logic what (): Mat :: operator (): index за пределами границ».

У меня возникала аналогичная проблема всякий раз, когда я пытался выполнить задание, которое включает подматрицу с левой стороны. Например:

B.row(1)=A

Я хотел бы знать, можно ли присвоить значения типам матриц / векторов с клавиатуры. Кроме того, есть ли способ установить значения для подматрицы типа mat с помощью простого присваивания.


person anonlinear    schedule 04.10.2014    source источник


Ответы (1)


Векторы и матрицы в Armadillo обычно должны иметь ненулевой размер, прежде чем вы сможете помещать в них элементы. Вы можете установить размер во время построения матрицы или с помощью . set_size () или с помощью . zeros ().

Измените свой код на:

int main()
  {
  vec mu1(10, fill::zeros);

  for(int i=0; i<10; i++)
    {
    double tmp;

    cin >> tmp; 

    mu1(i) = tmp;
    }

  mu1.print("mu1:");

  return 0;
  }

Обратите внимание, что использование cin, как правило, плохо с точки зрения пользовательского интерфейса. Вместо этого вы можете сохранить все значения матрицы или вектора в текстовом файле, а затем загрузить текстовый файл. Например, предположим, что у нас есть текстовый файл с именем A.txt, содержащий:

0.0  1.0  2.0  3.0
4.0  5.0  6.0  7.0

Затем вы можете загрузить файл в Armadillo, используя:

mat A;
A.load("A.txt");
person mtall    schedule 06.10.2014