我无法使用键盘输入来设置由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|error:不匹配'operator>>‘(操作数类型为'std::istream {aka std::basic_istream}’和‘arma::vec{ arma::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的实例之后终止调用--什么():Mat::operator():索引超出界限”。
每当我尝试一项涉及左手边的子矩阵的作业时,我都会遇到类似的问题。例如:
B.row(1)=A我想知道是否有可能从键盘给矩阵/向量类型赋值。另外,是否使用简单的赋值将值设置为mat类型的子矩阵。
发布于 2014-10-06 13:17:05
在Armadillo中,向量和矩阵通常需要一个非零的大小,然后才能将元素放入其中。您可以在矩阵的施工期间设置大小,也可以使用大小()或使用.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");https://stackoverflow.com/questions/26188858
复制相似问题