我正在尝试 运行 Armadillo on Mac OS 但我一直收到同样的错误
I'm trying to run Armadillo on Mac OS but i keep getting the same error
我正在尝试用文本文件中的数据填充矩阵。
这是我的代码
int main() {
ifstream in;
int n=150;
int m=5;
mat coordinates (n,m);
coordinate.zeros();
in.open("test.txt");
for (int i=0; i<n ; i++) {
for (int j=0; i<m ; j++)
in >> coordinates(i,j);
return 0;
}
我用命令编译的
g++ -I/usr/local/include coordinates.cpp -O2 -larmadillo -llapack -lblas
到目前为止一切似乎都很好,但是当我尝试 运行 该程序时,出现以下错误
error: Mat::operator(): index out of bounds
libc++abi.dylib: terminating with uncaught exception of type std::logic_error: Mat::operator(): index out of bounds
Abort trap: 6
我尝试了我能想到的一切,但没有任何效果。你有什么建议吗?
感谢您的宝贵时间。
您的代码中存在错误:第二个循环有 i<m
而不是 j<m
。
此外,不要直接对矩阵使用 >>
运算符,因为您无法检查是否实际读取了元素。相反,您可以简单地使用 .load()
成员函数加载整个文件。
最好在发布基本问题之前通读 Armadillo documentation。
// simple way
mat coordinates;
coordinates.load("test.txt", raw_ascii); // .load() will set the size
coordinates.print();
或
// complicated way
ifstream in;
in.open("test.txt");
unsigned int n=150;
unsigned int m=5;
mat coordinates(n, m, fill::zeros);
for(unsigned int i=0; i<n; ++i)
{
for(unsigned int j=0; j<m; ++j)
{
double val;
in >> val;
if(in.good()) { coordinates(i,j) = val; }
}
}
coordinates.print();
我正在尝试用文本文件中的数据填充矩阵。
这是我的代码
int main() {
ifstream in;
int n=150;
int m=5;
mat coordinates (n,m);
coordinate.zeros();
in.open("test.txt");
for (int i=0; i<n ; i++) {
for (int j=0; i<m ; j++)
in >> coordinates(i,j);
return 0;
}
我用命令编译的
g++ -I/usr/local/include coordinates.cpp -O2 -larmadillo -llapack -lblas
到目前为止一切似乎都很好,但是当我尝试 运行 该程序时,出现以下错误
error: Mat::operator(): index out of bounds
libc++abi.dylib: terminating with uncaught exception of type std::logic_error: Mat::operator(): index out of bounds
Abort trap: 6
我尝试了我能想到的一切,但没有任何效果。你有什么建议吗?
感谢您的宝贵时间。
您的代码中存在错误:第二个循环有 i<m
而不是 j<m
。
此外,不要直接对矩阵使用 >>
运算符,因为您无法检查是否实际读取了元素。相反,您可以简单地使用 .load()
成员函数加载整个文件。
最好在发布基本问题之前通读 Armadillo documentation。
// simple way
mat coordinates;
coordinates.load("test.txt", raw_ascii); // .load() will set the size
coordinates.print();
或
// complicated way
ifstream in;
in.open("test.txt");
unsigned int n=150;
unsigned int m=5;
mat coordinates(n, m, fill::zeros);
for(unsigned int i=0; i<n; ++i)
{
for(unsigned int j=0; j<m; ++j)
{
double val;
in >> val;
if(in.good()) { coordinates(i,j) = val; }
}
}
coordinates.print();