我想将源代码从python转移到c++(#include )。
我有一个尺寸为1x200的 vector (矩阵)保存到“my_vec.txt”:

-0.082833
0.151422
-0.088526
...
...
0.115863
0.131043
0.041844

我想在python中计算两个my_vec的点积(这只是测试示例)。
result = my_vec.dot(my_vec)
print (str.format("{0:.10f}", result))

结果是给我 6.1402435303

当我尝试使用 Armadillo 在c++中执行相同的操作时:
float result;
result = dot(my_vec, my_vec);
std::cout << std::setprecision(10) << result;

我得到 6.140244007

因此,从文本文件加载值后,我在 Armadillo 中查看了我的浮点 vector my_vec。它是这样的:
 -8.283299952745e-002
  1.514219939709e-001
 -8.852600306273e-002
 ...
 ...
 1.158630028367e-001
 1.310430020094e-001
 4.184399917722e-002

添加了很多小数位(my_vec.txt中不存在)。当然,这种差异会影响进一步的计算。我该如何预防?

最佳答案

看来您在C++代码中使用的精度较低。 C++ float通常对应于NumPy float32;如果您想要与NumPy float64等效的精度,通常是C++ double

关于python - 从文件中加载后, Armadillo 中的矩阵( vector )将获得新的小数位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36073143/

10-11 20:36