[英]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.