我有一個 NumPy 陣列[545, 32]并向它傳遞一個函式:
def obj_func(array):
x = array[0]
y = array[1]
obj_func = (x**2 y - 11)**2 (x y**2 - 7)**2
return obj_func
公式應該看起來像
(545^2 32 - 11)^2 (545 32^2 - 7)^2
當我通過我的函式傳遞它時得到的答案是-1955547256,但答案應該是大約 8.82387x10^10。
這可能與操縱大數字有關,因為我通過函式計算出的較小值有正確的答案。但是為什么它回傳負數等?我確信這個函式不應該回傳任何負數。
uj5u.com熱心網友回復:
您可能希望是更改陣列中的變數型別還是呼叫obj_func串列:
obj_func(np.array([545, 32]))
>>> -1955547256
obj_func([545, 32])
>>> 88238765960
obj_func(np.array([545, 32], dtype=np.int64))
>>> 88238765960
當陣列的資料超過這一效應發生最大機限制為array.dtype = np.int32
可以這樣檢查:
np.iinfo(np.int32)
>>> iinfo(min=-2147483648, max=2147483647, dtype=int32)
np.iinfo(np.int64)
>>> iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64)
np.array([2147483647]) 1
>>> array([-2147483648]) # shifts to minimum machine limit of dtype=int32
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400535.html
