亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Python Numpy Arange意外結果

Python Numpy Arange意外結果

鴻蒙傳說 2019-10-21 15:13:27
我正在使用arange函數來定義我的for循環迭代并獲得意外結果。i = arange(7.8,8.4,0.05)print i滿足以下條件:[ 7.8   7.85  7.9   7.95  8.    8.05  8.1   8.15  8.2   8.25  8.3   8.35 8.4 ]仍使用8.35的停止值,如下所示i = arange(7.8,8.35,0.05)產生以下[ 7.8   7.85  7.9   7.95  8.    8.05  8.1   8.15  8.2   8.25  8.3 ]但是我希望我的射程結束于8.35!我知道我可以使用> 8.35和<8.4的止損值來獲得我的結果,但是為什么它與眾不同并且在我看來不一致?編輯:我正在使用2.7版
查看完整描述

3 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

也許這與浮點數的限制有關。由于機器的精度,不可能將所有可能的值完美地存儲為浮點數。例如:


>>> 8.4

8.4000000000000004

>>> 8.35

8.3499999999999996

因此,作為浮點數的8.4略大于8.4的實際值,而作為浮點數的8.35則稍小一點。


查看完整回答
反對 回復 2019-10-21
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

我猜想您正在看到浮點取整的效果。


numpy.arange與python的功能相同range:它不包含“端點”。(例如range(0, 4, 2)將[0,2]代替[0,2,4])


但是,對于浮點步長,舍入誤差會累積,有時最后一個值實際上會包括端點。


如文檔中所述arange:


當使用非整數步驟(例如0.1)時,結果通常將不一致。最好在linspace這些情況下使用。


numpy.linspace在起點和終點之間生成指定數量的點。順便說一句,默認情況下確實包含端點。


查看完整回答
反對 回復 2019-10-21
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

范圍函數的幫助說


    For floating point arguments, the length of the result is

    ``ceil((stop - start)/step)``.  Because of floating point overflow,

    this rule may result in the last element of `out` being greater

    than `stop`.

對于python 2.7,現在在大多數平臺上都可以正確舍入浮點數和字符串之間的轉換。


在2.7中


>>> float(repr(2.3))

2.3

在2.6中


>>> float(repr(2.3))

2.2999999999999998


查看完整回答
反對 回復 2019-10-21
  • 3 回答
  • 0 關注
  • 814 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號