使用item
全面輝煌打印值:
In [83]: for i in np.arange(1,2,0.05):print(i.item())
1.0
1.05
1.1
1.1500000000000001
1.2000000000000002
1.2500000000000002
1.3000000000000003
1.3500000000000003
1.4000000000000004
1.4500000000000004
1.5000000000000004
1.5500000000000005
1.6000000000000005
1.6500000000000006
1.7000000000000006
1.7500000000000007
1.8000000000000007
1.8500000000000008
1.9000000000000008
1.9500000000000008
即使linspace
有這些額外的數字送行結束:
In [84]: for i in np.linspace(1,2,21):print(i.item())
1.0
1.05
1.1
1.15
1.2
1.25
1.3
1.35
1.4
1.45
1.5
1.55
1.6
1.65
1.7000000000000002
1.75
1.8
1.85
1.9
1.9500000000000002
2.0
in
和==
測試並不是一個好主意,當使用浮動。
isclose
和allclose
測試小的差異,而不是精確匹配
In [89]: np.isclose(np.arange(1,2,0.05),1.25)
Out[89]:
array([False, False, False, False, False, True, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False], dtype=bool)
In [90]: np.isclose(np.arange(1,2,0.05),1.25).any()
Out[90]: True
看那isclose
代碼,看看所有參與比較浮動。
*「十進制小數不能完全表示爲二進制分數」* - 對於數組中的值與其進行比較(也將是64位浮點數)的文字「1.25」同樣適用。我認爲問題是*步長*不能完全表示爲二進制分數。例如,np.arange(1,2,2 ** - 4)中的'1.25'== True。 –
@ali_m是的,謝謝澄清,但正如我所說它是「小數分數」,並且在添加該步驟後出現,原因可能是步驟或結果。 – Kasramvd