首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在armadillo C++中获取矩阵类型变量的键盘输入

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

Stack Overflow用户
提问于 2014-10-04 01:49:44
回答 1查看 747关注 0票数 1

我无法使用键盘输入来设置由armadillo库定义的向量或矩阵类型变量的值。这是我正在使用的代码。

代码语言:javascript
复制
#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。

代码语言:javascript
复制
float arr[20]={};
for(int i=0;i<5;i++)
{
     cin>> arr[i];
}
 mu1(0)=arr[0];

这使输出窗口出现了一个错误。

“error : Mat::operator():索引超出界限,在抛出std::logic的实例之后终止调用--什么():Mat::operator():索引超出界限”。

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

代码语言:javascript
复制
B.row(1)=A

我想知道是否有可能从键盘给矩阵/向量类型赋值。另外,是否使用简单的赋值将值设置为mat类型的子矩阵。

EN

回答 1

Stack Overflow用户

发布于 2014-10-06 13:17:05

在Armadillo中,向量和矩阵通常需要一个非零的大小,然后才能将元素放入其中。您可以在矩阵的施工期间设置大小,也可以使用大小()或使用.zeros()

将代码更改为:

代码语言:javascript
复制
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的文本文件,其中包含:

代码语言:javascript
复制
0.0  1.0  2.0  3.0
4.0  5.0  6.0  7.0

然后,可以使用以下方法在Armadillo中加载该文件:

代码语言:javascript
复制
mat A;
A.load("A.txt");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26188858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档