簡體   English   中英

Python Numpy數組相等失敗

[英]Python Numpy array equality failure

為什么會失敗? 我建立一個數組,創建與該陣列減去從陣列內的值的新的變量,然后陣列比較, 似乎是在陣列中的值。 那么,為什么平等測試失敗了?

import numpy as np
import platform
print platform.python_version()
print np.__version__ 
x = np.arange( -1,1,0.1 )
new_x = x - x[5]
print new_x
print new_x == -0.2

輸出:

2.7.9
1.9.2
[-0.5 -0.4 -0.3 -0.2 -0.1  0.  0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9  1.   1.1  1.2  1.3  1.4]
[False False False False False False False False False False False False False False False False False False False False]

編輯:使用np.round()導致比較行為符合預期; 現在的問題是,為什么在打印數組時為什么會顯示四舍五入的數字? 以我的經驗,當數字不准確時,python通常會打印科學計數法或僅顯示一堆小數位。

令人震驚的是,我用Python進行科學編程已有6年了,從未見過! 感覺像是一個菜鳥問題,但我真的不明白為什么印刷的內容是四舍五入的。

您可能會懷疑,這種奇怪的行為是由於在浮點計算過程中發生了小的精度誤差。 要查看差異,可以使用float.hex()將浮點數轉換為十六進制形式:

>>> new_x[3].hex()
'-0x1.9999999999998p-3'
>>> (-0.2).hex()
'-0x1.999999999999ap-3'

注意,它們實際上是兩個不同的浮點數。 “舍入”僅在打印時發生,實際上是Python本身默認執行的操作 基本思想是Python對象(包括浮點數)有兩種形式的字符串表示形式: strrepr repr應該返回“真實的”,可再現的字符串表示形式,而str應該針對人類可讀性進行優化-其中一部分包括“取整”以隱藏較小的精度錯誤。 注意:

>>> repr(new_x[3])
'-0.19999999999999996'
>>> repr(-0.2)
'-0.2'

對於浮點數,您可以使用numpy.isclose()模擬相等性檢查,如下所示:

>>> print numpy.isclose(new_x, -0.2)
[False False False  True False False False False False False False False
 False False False False False False False False]

暫無
暫無

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

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