![](/img/trans.png)
[英]Is there a Numpy function for casting just one element to a different type than the rest?
[英]Numpy function type casting automatically or not
考慮以下 numpy 代碼
foo = np.array([255, 255], dtype=np.uint8)
foo_sum = foo.sum()
foo_square_v1 = foo**2
foo_square_v2 = np.square(foo)
foo_square_v3 = np.pow(foo, 2)
foo_sum
正確轉換為 uint64 並返回510
但是所有 3 foo_square
都沒有觸發類型轉換並且有溢出(,!!),返回[1,1]
知道我是否應該手動進行投射,或者 numpy 是否為我自動進行投射的經驗法則是什么?
我的系統:Python 3.x,X64機器,Linux,numpy 1.20.3
您似乎希望 NumPy 檢測溢出並提升 dtypes 作為響應。 NumPy 永遠不會那樣做。 大多數 NumPy 功能將只使用與輸入相同的 dtype,或者在有多個 dtype 時遵循默認的提升規則。
numpy.sum
是不尋常的,但即使它的 dtype 規則也不是你想要的。 引用numpy.sum
的文檔( a是輸入數組):
默認情況下使用a的 dtype,除非a的 integer dtype 的精度低於默認平台 integer。 在這種情況下,如果a已簽名,則使用平台 integer,而如果a未簽名,則使用與平台精度相同的未簽名 integer。
這里的“默認平台整數”是 C long
(不是 C int
)。 如果 C long
是 32 位(特別是在 Windows 上)並且您需要 64 位 output 以避免溢出,您仍然需要手動指定 dtype。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.