簡體   English   中英

Numpy function 自動鑄造與否

[英]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.

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