簡體   English   中英

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

[英]Check for numpy array equality with specific NaN

在大多數浮點表示中可能有幾種不同類型的 NaN(例如安靜 NaN、信號 NaN 等)。 我認為這在 numpy 中也是如此。 我有一個 NaN 的特定位表示,用 C 定義並導入到 python 中。 我想測試一個數組是否完全包含這個特定的浮點位模式。 有沒有辦法做到這一點?

請注意,我想測試數組是否包含這個特定的NaN,而不是一般情況下它是否包含 NaN。

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)

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

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

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

暫無
暫無

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

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