NumPy структурированные массивы: помочь понять вывод - PullRequest
0 голосов
/ 04 марта 2011

Я пытаюсь научиться использовать структурированные массивы numpy. В частности, я пытался добавить информацию более чем в одно поле за раз. Я попробовал:

import numpy as np

numrec = np.zeros(8, dtype=[('col0', 'int16'), ('col1', 'int16'),
                            ('col2', 'int16'), ('col3', 'int16')])

numrec[['col1','col2']][0:2] = [(3,5), (1,8)]
print numrec

Выше не работает. Значения не добавляются в указанные столбцы. Что удивительно, я не получаю никакой ошибки при запуске. Может кто-нибудь объяснить, пожалуйста, что происходит?

Спасибо.

1 Ответ

9 голосов
/ 05 марта 2011

Вы устанавливаете значения для временного.

numrec[["col1", "col2"]]

возвращает копию массива.Это можно увидеть по флагу OWNDATA.

>>> numrec[["col1", "col2"]].flags["OWNDATA"]
True

Когда вы индексируете массив numpy со списком, numpy возвращает копию данных.Это должна быть копия, потому что, как правило, список может не разрешаться в обычном упорядоченном представлении базовых данных.(Это относится к любому массиву-пустышке, а не только к структурированным массивам.)

Сравнить

>>> numrec[["col1"]].flags["OWNDATA"]
True
>>> numrec["col1"].flags["OWNDATA"]
False

Кроме того, если массив-пустышка является представлением, базовый элемент содержит базовый массив.

>>> id(numrec["col1"].base) == id(numrec)
True
...