在armadillo C++中获取矩阵类型变量的键盘输入

Taking Keyboards inputs for matrix type variables in armadillo C++

本文关键字:类型变量 键盘 输入 armadillo C++ 获取      更新时间:2023-10-16

我无法通过键盘输入来设置用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}"answers"arma::vec{akaarma:::Col}")"

尝试使用cin>>mu1(i)逐个输入值。我还尝试将输入作为数组然后将这些元素分配给mu1。

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

这在输出窗口中出现错误

"error:Mat::operator():在抛出std::logic error what():Mat::operator:():index越界的实例后调用的索引越界终止"。

每当我尝试一个涉及左手边子矩阵的任务时,我都会遇到类似的问题。例如:

B.row(1)=A

我想知道是否可以通过键盘为矩阵/矢量类型赋值。此外,是否可以使用简单的赋值将值设置为mat类型的子矩阵。

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");