繁体   English   中英

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

[英]Taking Keyboards inputs for matrix type variables in 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 ::上校}')”

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

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

这在输出窗口中给出了错误

“在抛出std ::逻辑错误what():Mat :: operator():index out of bounds实例后,调用error:Mat :: operator():index超出范围终止”。

每当我尝试涉及左侧子矩阵的作业时,我都会遇到类似的问题。 例如:

B.row(1)=A

我想知道是否有可能通过键盘将值分配给矩阵/向量类型。 另外,还是可以通过简单的赋值将值设置为垫子类型的子矩阵。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM