1 回答

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。
添加回答
舉報