這段代碼:
a = np.array([10], dtype=np.int8)
b = np.array([2], dtype=np.int8)
print(np.dot(a, b))
a = np.array([10], dtype=np.int8)
b = np.array([5], dtype=np.int8)
print(np.dot(a, b))
a = np.array([10], dtype=np.int8)
b = np.array([20], dtype=np.int8)
print(np.dot(a, b))
產生以下輸出:
20
50
-56
np.dot即使它不適合,它似乎也會嘗試在相同的資料型別物件中回傳結果。確定這是一個錯誤?為什么不拋出例外?
uj5u.com熱心網友回復:
這適用于乘法和加法。
In [89]: np.array([128], 'int8')*2
Out[89]: array([0], dtype=int8)
In [90]: np.array([127], 'int8')*2
Out[90]: array([-2], dtype=int8) # same int8 dtype
但是如果我使用陣列的一個元素,一個np.int8物件,結果會被提升。
In [91]: np.array([127], 'int8')[0]*2
Out[91]: 254
In [92]: type(_)
Out[92]: numpy.int32
我認為,雖然不能臨時生產,但在某些情況下這種事情會引發錯誤。
這已在其他 SO 中討論過,用于乘法,如果不是np.dot.
這是 'uint8' dtypes 的溢位問題,github 問題鏈接:

如您所見,轉換函式是 period 的周期函式256;[-128, 128)超出范圍n!=numpy.int8(n);一般來說,你可以說numpy.int8(n) == ((n-128)%6)-128),確實((200-128)%6)-128 == -56
PS。如果您只需要正整數,則可以使用該型別numpy.uint8對區間中的數字進行編碼[0,256)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530657.html
標籤:Python麻木的点积
上一篇:將元素附加到2dnumpy陣列
下一篇:根據其他列的情況填充缺失值
