簡體   English   中英

Python / C ++-精度差異

[英]Python / C++ - difference in precision

經過優化后,我在Python和C ++中都使用最優參數計算殘差。 結果差距巨大。 這是我更精確地進行的操作:

我根據Python中的參數模型生成數據。 我將X和Y存儲在Excel文件中。 我將此文件加載到C ++程序中並運行優化。 我提出了最佳參數,這些參數與用於生成序列的參數非常接近。 然后,我在Python和C ++中計算殘差(Y和具有最佳參數的模型輸出之間的平方差之和)。 結果是巨大的,對於對參數變化非常敏感的模型,差異最多可達10 ^ 3。 這些差異是否可以歸因於采用不同的方式處理Python和C ++中的精度,還是可能有其他問題? 優化完成后,殘差計算就是一個簡單的計算,我想知道如果不考慮精度問題,問題可能出在哪里。

非常感謝您的任何建議或參考。

編輯---我可以輕松地顯示用於生成數據和計算殘差平方和的Python代碼,但不能顯示C ++代碼,因為計算是通過解釋器執行的。 感謝您的任何評論。

P1 =  5.21
P2 = 0.22

X_= list(range(0,100,1))
X=[float(x)/float(10) for x in X_]
Y = [P1*numpy.exp(-1*P2*x) for x in X]

##plt.plot(X,Y)
##plt.show()

##for j in range(len(Y)):
##    Y[j]+=rg.normal(0,0.01)

#build some input files
X1f = open('F:\WORK\SOLVEUR\ALGOCODE\PYTHON_\DataSets\exponential1X.txt', 'w')
for i in range(len(X)):
     X1f.write(str(X[i])+'\n')
X1f.close()

Yf = open('F:\WORK\SOLVEUR\ALGOCODE\PYTHON_\DataSets\exponential1Y.txt', 'w')
for i in range(len(Y)):
    Yf.write(str(Y[i])+'\n')
Yf.close()


def func_exp_1(param, x1, y):
   p1, p2 = param
   res = sum((y_i - p1*numpy.exp(-1*p2*x))**2 for x1_i, y_i in zip(x1, y))
   return res
print func_exp_1([5.2132,0.2202],x1,y)

Python和C ++都使用機器本機格式。 Python的float等效於C ++的double 任何差異都可能歸因於算法實現方式的差異, 或者 ,如果硬漢具有用於中間值的擴展格式(對於Intel),則語言在何時何地將值存儲回內存中-值在Python中可能比在C ++中更頻繁地存儲到內存中。 沒有看到確切的代碼,就不可能多說(但是,大量元素的總和可能會顯着減少,具體取決於元素的順序和相對大小)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM