運行以下程式:
for i in range(10):
a = np.random.uniform(0, 1)
print(a)
我們有結果:
0.4418517709510906
0.05536715253773261
0.44633855235431785
0.3143041997189251
0.16175184090609163
0.8822875281567105
0.11367473012241913
0.9951703577237277
0.009103257465210124
0.5185580156093157
為什么每個輸出的精度不同?有時精確到小數點后 16 位,但有時精確到小數點后 18 位。為什么會這樣?
另外,如果我想控制輸出的精度,即每次只輸出15位小數,我該怎么做呢?
編輯:我嘗試使用np.set_printoptions(precision=15)
np.set_printoptions(precision=15)
for i in range(10):
a = np.random.uniform(0, 1)
print(a)
但輸出是:
0.3908531691561824
0.6363290508517755
0.3484260990246082
0.23792451272035053
0.5776808805593472
0.3631616619602701
0.878754651138258
0.6266540814279749
0.8309347174000745
0.5763464514883537
這仍然沒有得到我想要的結果。我想要的結果如下:
0.390853169156182
0.636329050851775
0.348426099024608
0.237924512720350
0.577680880559347
0.363161661960270
0.878754651138258
0.626654081427974
0.830934717400074
0.576346451488353
uj5u.com熱心網友回復:
print(a)列印產生與 相同的 float64 值的最短數字字串a。
例子:
a = 0.392820481778549002
b = 0.392820481778549
a_bits = np.asarray(a).view(np.int64).item()
b_bits = np.asarray(b).view(np.int64).item()
print(f"{a:.18f}", hex(a_bits))
print(f"{b:.18f}", hex(b_bits))
print(a == b)
結果:
0.392820481778549002 0x3fd923f8849c0570
0.392820481778549002 0x3fd923f8849c0570
True
您可以使用f"{a:.18f}"語法來獲得固定寬度的輸出。numpy 陣列的等價物是np.set_printoptions(precision=18, floatmode="fixed").
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/420103.html
標籤:
