犰狳中的矩阵(向量)从文件加载后将获得新的小数位数 我想把源代码从Python转移到C++(包括“犰狳>”)。 我将一个向量(矩阵)保存到“my_vec.txt”中,维度为1x200: -0.082833 0.151422 -0.088526 ... ... 0.115863 0.131043 0.041844

犰狳中的矩阵(向量)从文件加载后将获得新的小数位数 我想把源代码从Python转移到C++(包括“犰狳>”)。 我将一个向量(矩阵)保存到“my_vec.txt”中,维度为1x200: -0.082833 0.151422 -0.088526 ... ... 0.115863 0.131043 0.041844,python,c++,armadillo,Python,C++,Armadillo,我想计算python中两个my_vec的点积(这只是一个测试示例) 结果给我6.1402435303 当我尝试在C++中用犰狳做同样的操作: float result; result = dot(my_vec, my_vec); std::cout << std::setprecision(10) << result; 添加了很多小数位(my_vec.txt中没有)。当然,这种差异会影响进一步的计算。如何防止?看起来你在C++代码中使用的精度较低。C++ >代码>浮点通

我想计算python中两个my_vec的点积(这只是一个测试示例)

结果给我6.1402435303

当我尝试在C++中用犰狳做同样的操作:

float result;
result = dot(my_vec, my_vec);
std::cout << std::setprecision(10) << result;

添加了很多小数位(my_vec.txt中没有)。当然,这种差异会影响进一步的计算。如何防止?

看起来你在C++代码中使用的精度较低。C++ >代码>浮点通常对应于NUMPY <代码> FLUAT32 ;如果你想要的精度相当于NoMy<代码> FooLoL4,这通常是C++ <代码>双。我在python中加载矩阵的方式是:my_vec=np.loadtxt(my_vec_文件,dtype=np.float32)。它是32。因此,我在犰狳中使用fvec(用于浮点数)而不是vec(用于双精度),但在计算点积之后,我仍然得到不同的值。我应该在哪里更改精度。提前感谢。如果我将矩阵保存回txt文件(python),其精度如下:-8.28329995274543762E-02@KTBFFH:如果您故意使用32位浮点,则预期会出现这种程度的差异。32位浮点只能保存大约6位小数精度;你只是强迫程序显示基本上是噪声的数字。我必须在C++中传输Python代码,所以不幸的是如果它调用NP.FLUAT32,我必须接受它,并且尝试在C++中复制相同的结果。让我总结一下(向量的第一个值)。在Python中加载Txt:-0.0828 33(Dyt= NP.FLUAT32):在C++(A+ADIADILO)中加载(.txt)后的-828、329、952445、46622E-02:-828、329、99、527、45、E-2000,这两个程序的浮点值的基本噪声是相同的。但是python显示了更多的数字,这些数字对以后的一些运算(比如乘法)有影响。我怎么能像python中一样获得犰狳矩阵的精度呢?提前谢谢。@KTBFFH:加载的结果很可能是相同的-Python只是显示了更多的数字。但是,如果您希望之后的所有计算都有完全相同的输出,则需要专门的库,专门针对精确的再现性。几乎每个人都会为了速度而牺牲再现性。
float result;
result = dot(my_vec, my_vec);
std::cout << std::setprecision(10) << result;
 -8.283299952745e-002
  1.514219939709e-001
 -8.852600306273e-002
 ...
 ...
 1.158630028367e-001
 1.310430020094e-001
 4.184399917722e-002