第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何處理 Python Numpy 中的精度問題?

如何處理 Python Numpy 中的精度問題?

森欄 2023-12-29 17:08:05
有一個功能:def get_acc(real_dpt, real_avg, pre_dpt, pre_avg, axis):    delta_Rf = pre_dpt/pre_avg    delta_Rf_avg = pre_avg    delta_Ro = real_dpt / real_avg    delta_Ro_avg = real_avg    pre = delta_Rf - delta_Rf_avg    obs = delta_Ro - delta_Ro_avg    d1 = np.sum(pre*obs, axis=axis)    d2 = (np.sum(pre**2, axis=axis)*np.sum(obs**2, axis=axis))**0.5    return d1/d2前:obs_DPT, obs_AVG, cwrf_DPT, cwrf_AVG ,The same ndarray shape is passed in,Shape = (29, 1452, 5), dtype = np.float32我有result1 = get_acc(obs_DPT, obs_AVG, cwrf_DPT, cwrf_AVG, axis=1)# result1.shape = (29, 5)  array沒有問題然后,我得到了result2 = get_acc(obs_DPT[i, :, 2:3], obs_AVG[i, :, 2:3], cwrf_DPT[i, :, 2:3], cwrf_AVG[i, :, 2:3], axis=0) # i is    0, 1, 2, 3,...,28# result2.shape=(1,)現(xiàn)在,我使 result3 = result1[i, 2:3]result3 = result1[i, 2:3]   # result3.shape=(1,)然后我做出判斷if result2[0] == result3[0] :       print("i={}, resul2={}, resul3={}".format(i, resul2[0],  resu3[0]))對于 28 i,只有以下是相等的i=4, resul2=0.9601920247077942, resul3=0.9601920247077942i=21, resul2=0.966850221157074, resul3=0.966850221157074i=27, resul2=0.9409129023551941, resul3=0.9409129023551941其他人不平等i=0, resul2=0.9641021490097046, resul3=0.9641022682189941i=1, resul2=0.937653124332428, resul3=0.9376530647277832i=2, resul2=0.9460444450378418, resul3=0.9460448026657104i=3, resul2=0.9394290447235107, resul3=0.9394280314445496i=5, resul2=0.9721810221672058, resul3=0.9721801280975342i=6, resul2=0.9628128409385681, resul3=0.9628139734268188i=7, resul2=0.9723774790763855, resul3=0.9723766446113586i=8, resul2=0.9653074741363525, resul3=0.9653091430664062i=9, resul2=0.9601299166679382, resul3=0.9601304531097412i=10, resul2=0.9747092127799988, resul3=0.9747100472450256i=11, resul2=0.9554705023765564, resul3=0.9554708003997803i=12, resul2=0.9655697345733643, resul3=0.9655706286430359i=13, resul2=0.9721916317939758, resul3=0.9721908569335938另外,我還有一個問題數(shù)組dtype = np.float32當(dāng)我制作數(shù)組時dtype = np.float64我沒有得到平等result2的result3不知道我說清楚了沒有,如何解決這個問題十分感謝
查看完整描述

1 回答

?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個贊

您的函數(shù)有幾個步驟,可能無法立即清楚是哪個步驟導(dǎo)致了差異。


如果您使用完整數(shù)組和其中的一個切片并排執(zhí)行函數(shù),并在每個步驟后比較結(jié)果,您會注意到存在差異的第一步是求和。


考慮一個更簡單的測試:


import numpy as np


test = np.random.rand(29, 1452, 5)

sum1 = np.sum(test[0, :, 2:3])

sum2 = np.sum(test, axis=1)[0, 2:3]

print(np.max(abs(sum1 - sum2)))


這個例子很可能已經(jīng)打印出一個非零的數(shù)字。


顯然,問題的核心在于求和的順序,該順序根據(jù)輸入的形狀而不同。這會導(dǎo)致浮點(diǎn)舍入誤差的累積。


如需進(jìn)一步閱讀,請考慮 David Goldberg 的“每個計(jì)算機(jī)科學(xué)家應(yīng)該了解的浮點(diǎn)運(yùn)算知識”。


更新:在下面的注釋中,該示例可以進(jìn)一步簡化。然而,重要的是應(yīng)用的維度np.sum不是最后一個。


import numpy as np


test = np.random.rand(1452, 5)

sum1 = np.sum(test[:, 2])

sum2 = np.sum(test, axis=0)[2]

print(np.max(abs(sum1 - sum2)))

數(shù)字 1452 也沒有什么神奇之處。人們經(jīng)??梢杂^察到尺寸小得多的數(shù)組的非零差異。


查看完整回答
反對 回復(fù) 2023-12-29
  • 1 回答
  • 0 關(guān)注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號