c++ - 使用 Armadillo 库时如何增加显示的位数

标签 c++ armadillo iomanip

我正在使用 Armadillo 线性代数库对角化矩阵。我需要增加最后显示/写入文件的位数。根据 Armadillo 的 reference , "arma::mat"将创建一个双矩阵。因此,我尝试使用“iomanip”中的 std::setprecision,但效果不佳。这是捕获问题的最小代码:

#include<iostream>
#include<armadillo>
#include<iomanip>

int main()
{
   double Trace_A = 0.;
   arma::mat A;
   A = :arma::randu<arma::mat>(5,5);
   Trace = arma::trace(A);         

   // Normal output
   std::cout << "A = \n" <<A ;
   std::cout << "Trace(A) = " << Trace_A << std::endl;
   std::cout << "---------------------------------------------" << std::endl;

   // Displaying more digits
   std::cout << std::fixed << std::setprecision(15);
   std::cout << "A = \n" << A;
   std::cout << "Trace(A) = " << Trace_A << std::endl;
}

然后,这是我得到的:

A = 
   0.8402   0.1976   0.4774   0.9162   0.0163
   0.3944   0.3352   0.6289   0.6357   0.2429
   0.7831   0.7682   0.3648   0.7173   0.1372
   0.7984   0.2778   0.5134   0.1416   0.8042
   0.9116   0.5540   0.9522   0.6070   0.1567
Trace(A) = 1.83848
---------------------------------------------
A = 
   0.8402   0.1976   0.4774   0.9162   0.0163
   0.3944   0.3352   0.6289   0.6357   0.2429
   0.7831   0.7682   0.3648   0.7173   0.1372
   0.7984   0.2778   0.5134   0.1416   0.8042
   0.9116   0.5540   0.9522   0.6070   0.1567
Trace(A) = 1.838476590271330 

奇怪的是,它适用于传递给双变量“Trace_A”的迹线,但不适用于矩阵本身。知道我在这里做错了什么吗?

最佳答案

我想我知道怎么做了。可以使用“raw_print”来完成:

A.raw_print(std::cout);

这给出:

0.8402   0.1976   0.4774   0.9162   0.0163
0.3944   0.3352   0.6289   0.6357   0.2429
0.7831   0.7682   0.3648   0.7173   0.1372
0.7984   0.2778   0.5134   0.1416   0.8042
0.9116   0.5540   0.9522   0.6070   0.1567

0.84018771715 0.19755136929 0.47739705186 0.91619506800 0.01630057162
0.39438292682 0.33522275571 0.62887092476 0.63571172796 0.24288677063
0.78309922376 0.76822959481 0.36478447279 0.71729692943 0.13723157679
0.79844003348 0.27777471080 0.51340091020 0.14160255536 0.80417675423
0.91164735794 0.55396995580 0.95222972517 0.60696887626 0.15667908925

关于c++ - 使用 Armadillo 库时如何增加显示的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26819383/

相关文章:

c++ - Armadillo vector 矩阵乘法

c++ - 什么是 Armadillo+Atlas、Armadillo+OpenBLAS、Armadillo+uBLAS、Armadillo+MKL?

c++ - std::setw() 和 ostream::width() 之间的类型不一致

c++ - 如何在输出运算符中测试 std::showbase 或 std::noshowbase?

c++ - 为什么分配内存? (C++)

c++ - 如何从理论上计算嵌套循环的运行时间?

c++ - 将一段文本存储在变量 C++ 中

c++ - 为模板化( Armadillo )类专门化模板化函数

c++ - 从 Hex 中的 istream 中读取 double

c++ - 放置到forward_list段错误的后面