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

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

numpy np.in1d() 例程中可能出現的錯誤

numpy np.in1d() 例程中可能出現的錯誤

慕尼黑5688855 2022-07-12 10:07:10
我正在測試 numpynp.in1d()例程以查看它是否按預期工作,因為我需要將它包含在程序中。即我試過>>> import numpy as np>>> x = np.arange(0, 1, 0.1)>>> y = np.arange(0.5, 1, 0.2)>>> xarray([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])>>> yarray([0.5, 0.7, 0.9])>>> np.in1d(x, y)array([False, False, False, False, False,  True, False, False, False, False])上次評估的結果似乎是一個錯誤。根據文檔中的說明,我希望它是array([False, False, False, False, False,  True, False, True, False, True])我正在使用 Python 3.7.3 和 NumPy 1.16.1。我第一次嘗試它是在命令行上,然后在 IDLE 中復制上述 MWE 以查看它是否是錯誤或什么,但結果是相同的。這是一個已知的問題?numpy 的定義方式有問題dtype嗎np.arange()?還是其他的東西,比如 Python/numpy 版本?編輯:我嘗試做同樣的操作,但用整數代替,結果與我最初預期的一樣。特別是我做了:>>> x = np.arange(10)>>> y = np.arange(5, 10, 2)>>> np.in1d(x, y)array([False, False, False, False, False,  True, False,  True, False, True])這讓我懷疑這是一個與dtype數組相關的錯誤。
查看完整描述

2 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

這是 numpy.arange 舍入數字的方式。當你這樣做時,你可以更清楚地看到它:


y[2]


Output 0.8999999999999999  


x[9]


Output 0.9

他們不相等。所以你在最后一個位置得到了 False 。


但是,如果您要像這樣構造 ndarray:


a = np.array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])

b = np.array([0.5, 0.7, 0.9])

接著:


np.in1d(a, b)

輸出:


array([False, False, False, False, False,  True, False,  True, False,

        True])

你得到你想要的輸出。


查看完整回答
反對 回復 2022-07-12
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

這不是問題np.in1d,而是與浮點數的實現有關。不幸的是,十進制數通常不能精確地用有限長度的二進制表示,因此浮點數存在一些小的不準確性。自己檢查一下:

print(x[7],y[1]) #result: 0.7000000000000001 0.7 
print(x[9],y[2]) #result: 0.9 0.8999999999999999


查看完整回答
反對 回復 2022-07-12
  • 2 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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