Как определяется base
для массивов записей?
документы кажутся описывающими то же поведение, что и обычные массивы, но это не так.
Вот простой массив и массив записей, созданный из него.
>>> arr = np.zeros(10, dtype=[('a', float), ('b', int), ('c', int)])
>>> rec = arr.view(np.recarray)
База массива записей установлена правильно
>>> arr is rec
False
>>> arr is rec.base
True
base
правильно установлено для доступа к полям регулярного массива.
>>> arr['a'].base is arr
True
Однако для массива записей я не могу определить, что является основой. Это не обычный массив, массив записей, None
или что-либо еще, что я пробовал.
>>> rec['a'].base is arr
False
>>> rec['a'].base is rec
False
>>> rec['a'].base is None
False
>>> rec['a'].base is rec['a']
False
>>> rec['a'].base is rec['a'].base
False
>>> f = rec['a']
>>> f.base is f
False
Он ведет себя так, как и ожидалось для индексации срезов
>>> arr[:3].base is arr
True
>>> rec[:3].base is rec
True
И он определенно все еще указывает на ту же память
>>> arr[0]
(0., 0, 0)
>>> rec['a'] = 1
>>> arr[0]
(1., 0, 0)
Итак, как найти фактическую базу массива записей?