我經常使用numpy,最近通過處理數據類型之間的轉換的方式避免了這種轉換。陣列與標量的numpy類型轉換
假設我有一個無符號的8位整數(uint8),其值爲252.讓我們創建一個新的變量,將其遞增10,並打印變量及其類型的值。我不明白這裏會發生什麼,因爲252 + 10> 255(uint8的最大值)。然而我們看到加法「正常」發生,產生了262.新變量是64位整數:
>>> import numpy as np
>>> a = np.uint8(252)
>>> b = a + 10
>>> print (b, type(b))
262 <class 'numpy.int64'>
好的。讓我們嘗試一個稍微不同的實驗。這次我將252放入一個數組中,並執行相同的添加。我們在下面看到,結果現在是6而不是262,這意味着添加已經「纏繞」零。結果數組仍然是uint8類型。
>>> c = np.array([1,2,252], dtype='uint8')
>>> d = c + 10
>>> print (d[2], np.dtype(d[2]))
6 uint8
我的問題是:是否有一個很好的理由numpy的行爲,這些案件之間的區別?也許更好的問題是:無論原因是否好,決定何時進行這種轉換的規則是什麼?它真的只是數組和標量行爲嗎?
要添加到您的困惑,還是不行,讓''10' uint8',然後嘗試附加。 – hpaulj