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

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

檢查 numpy 數組與特定 NaN 是否相等

檢查 numpy 數組與特定 NaN 是否相等

12345678_0001 2023-06-27 16:27:37
大多數浮點表示中可能有幾種不同類型的 NaN(例如安靜 NaN、信號 NaN 等)。我認為這在 numpy 中也是如此。我有 NaN 的特定位表示,在 C 中定義并導入到 python 中。我希望測試一個數組是否完全包含這個特定的浮點位模式。有什么辦法可以做到這一點嗎?請注意,我想測試數組是否包含這個特定的NaN,而不是測試它是否包含一般的 NaN。
查看完整描述

1 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

Numpy 允許您直接訪問數組中的字節。對于簡單的情況,您可以直接將 nans 視為整數:


quiet_nan1 = np.uint64(0b0111111111111000000000000000000000000000000000000000000000000000)


x = np.arange(10, dtype=np.float64)

x.view(np.uint64)[5] = quiet_nan1


x.view(np.uint64)

現在您只需比較確切 NaN 的位模式的元素即可。該版本將保留形狀,因為元素大小相同。


float128一個更通用的解決方案是使用字節,它可以讓您使用在大多數系統上沒有相應整數模擬的類型:


quiet_nan1l = np.frombuffer((0b01111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000).to_bytes(16, 'big'))


x = np.arange(3 * 4 * 5, dtype=np.float128).reshape3, 4, 5)

x.view(np.uint8).reshape(*x.shape, 16)[2, 2, 3, :] = quiet_nan1l


x.view(np.uint8).reshape(*x.shape, 16)

最終的重塑并不是絕對必要的,但它非常方便,因為它沿著最后一個維度隔離了原始數組元素。


在這兩種情況下,修改視圖都會修改原始數組。這就是一個觀點的觀點。


當然,不言而喻(這就是我這么說的原因),這適用于您可能想要分配或測試的任何其他位模式,而不僅僅是 NaN。


查看完整回答
反對 回復 2023-06-27
  • 1 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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