簡體   English   中英

為什么 np nan 可以通過 `astype` 轉換為 int(但不能通過 `int`)?

[英]Why is np nan convertible to int by `astype` (but not by `int`)?

這個問題來自一個對我來說非常不直觀的發現。 如果嘗試以下操作:

import numpy as np
print(np.array([np.nan]).astype(int))
print(int(np.array([np.nan])))

那么第一個的輸出是[-9223372036854775808] ,第二個引發ValueError: cannot convert float NaN to integer 我期待后來的行為,我絕對不希望有人可以將np.nan轉換為 int。 為什么會這樣? 為什么可以使用astypenp.nan轉換為 int? 它有什么功能或意義嗎?

.astype具有可選參數casting ,其默認值為'unsafe' 允許以下值

  • 'no' 表示根本不應該轉換數據類型。
  • 'equiv' 表示只允許字節順序更改。
  • “安全”意味着只允許可以保留值的強制轉換。
  • 'same_kind' 表示只允許安全類型轉換或類型中的類型轉換,如 float64 到 float32。
  • “不安全”意味着可以進行任何數據轉換。

當一個嘗試做

import numpy as np
print(np.array([np.nan]).astype(int, casting="safe"))

一個得到以下錯誤

TypeError: Cannot cast array from dtype('float64') to dtype('int32') according to the rule 'safe'

暫無
暫無

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

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