Как внутренне работает NumPy ndarrary.view (...) - PullRequest
1 голос
/ 24 марта 2019

Я использовал следующий код для создания вида, но я хочу понять, как этот вид работает под капотом,

>>> x = np.array([(1, 2)], dtype=np.int8)
>>> y = x.view(dtype=np.int16)

где найти исходный код для ndarray.view(...), я искал в хранилище кода GitHub, но не смог его найти

1 Ответ

2 голосов
/ 24 марта 2019

Что вас больше всего интересует - механика кодирования или как 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.

...