What are you most interested in - the coding mechanics, or how int8
values are repsented as int16
?
view
creates a new array, with its own shape and dtype, but sharing the data buffer with the source. Most of the code that you'll see has to do with creating that new array, with little to nothing about the specific dtypes.
There are actually two versions of int16
, big-ended and little.
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
is a single byte which can represent values up to 256. The values we see depend on how the 2 bytes are combined into 1 number.
In [197]: 2*256+1
Out[197]: 513
In [198]: 1*256+2
Out[198]: 258
My guess is that you won't see this level of detail in the numpy
C code. It's performed by the C compiler.