Что вас больше всего интересует - механика кодирования или как int8
значения представлены как int16
?
view
создает новый массив с его собственной формой и типом d, но разделяющий буфер данных с источником. Большая часть кода, который вы увидите, имеет отношение к созданию этого нового массива, практически ничего не говоря о конкретных dtypes.
На самом деле существует две версии int16
, большая и маленькая.
In [194]: np.array([(1,2)],np.int8).view('<i2')
Out[194]: array([[513]], dtype=int16)
In [195]: np.array([(1,2)],np.int8).view('>i2')
Out[195]: array([[258]], dtype=int16)
np.int8
- это один байт, который может представлять значения до 256. Значения, которые мы видим, зависят от того, как 2 байта объединяются в 1 число.
In [197]: 2*256+1
Out[197]: 513
In [198]: 1*256+2
Out[198]: 258
Я предполагаю, что вы не увидите этот уровень детализации в коде numpy
C. Он выполняется компилятором C.