Я следую учебному пособию, показанному ниже, в разделе Виды Dtype:
https://scipy -cookbook.readthedocs.io / items / ViewsVsCopies.html
Я воспроизвел это ниже:
import numpy as np
b = np.arange(10, dtype='int16')
b
#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int16)
v3 = b.view('int32')
v3 += 1
b
#array([1, 1, 3, 3, 5, 5, 7, 7, 9, 9], dtype=int16)
v4 = b.view('int8')
v4
#array([1, 0, 1, 0, 3, 0, 3, 0, 5, 0, 5, 0, 7, 0, 7, 0, 9, 0, 9, 0], dtype=int8)
Меня больше всего смущает вопрос, почему v3 выглядит как?
array([ 65536, 196610, 327684, 458758, 589832], dtype=int32)
Несмотря на то, что при просмотре v3 все равно равен b при просмотреas ('int16'), как подтверждает следующий код:
v3.view('int16')
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int16)
Меня также немного смущает значение b после выражения сложения v3 + = 1:
array([1, 1, 3, 3, 5, 5, 7, 7, 9, 9], dtype=int16)
Здесь (1, dtype = 'int32') добавляется в v3, что, в свою очередь, добавляет его в b.
Будет ли такое представление, выражения dtype всегда обновляют просматриваемый массив, в данном случае b?
Поскольку dtype ('int32') в два раза больше, он будет иметь удвоенную длину значений 'int16' и перезаписывает два из них за раз, его шаг также будет вдвое большебольшой и поэтому он берет каждую вторую цифру в b.
Правильно ли это истолковано?
Почему каждая цифравозвращается дважды, а не просто возвращает усеченный b?
array([1, 3, 5, 7, 9], dtype=int16)