Python Numpy Structured Array (recarray) присваивающиеся значения в части

Следующий пример показывает то, что я хочу сделать:

>>> test
rec.array([(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
   (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)], 
  dtype=[('ifAction', '|i1'), ('ifDocu', '|i1'), ('ifComedy', '|i1')])

>>> test[['ifAction', 'ifDocu']][0]
(0, 0)

>>> test[['ifAction', 'ifDocu']][0] = (1,1)
>>> test[['ifAction', 'ifDocu']][0]
(0, 0)

Так, я хочу присвоить значения (1,1) кому: test[['ifAction', 'ifDocu']][0]. (В конечном счете я хочу сделать что-то как test[['ifAction', 'ifDocu']][0:10] = (1,1), присвоение тех же значений для для 0:10. Я попробовал много путей, но никогда не успешно выполнялся. Там какой-либо путь состоит в том, чтобы сделать это?

Спасибо, Joon

6
задан John Kugelman supports Monica 17 June 2010 в 03:00
поделиться

1 ответ

Когда вы говорите test ['ifAction'] , вы получаете представление о данных. Когда вы говорите test [['ifAction', 'ifDocu']] , вы используете причудливую индексацию и, таким образом, получаете копию данных. Копия вам не поможет, поскольку при изменении копии исходные данные остаются неизменными.

Таким образом, способ обойти это - присвоить значения test ['ifAction'] и test ['ifDocu'] индивидуально:

test['ifAction'][0]=1
test['ifDocu'][0]=1

Например:

import numpy as np
test=np.rec.array([(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
   (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)], 
  dtype=[('ifAction', '|i1'), ('ifDocu', '|i1'), ('ifComedy', '|i1')])

print(test[['ifAction','ifDocu']])
# [(0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0) (0, 0)]
test['ifAction'][0]=1
test['ifDocu'][0]=1

print(test[['ifAction','ifDocu']][0])
# (1, 1)
test['ifAction'][0:10]=1
test['ifDocu'][0:10]=1

print(test[['ifAction','ifDocu']])
# [(1, 1) (1, 1) (1, 1) (1, 1) (1, 1) (1, 1) (1, 1) (1, 1) (1, 1) (1, 1)]

Для Более глубокий взгляд на внутреннюю поверхность можно найти в этой публикации Роберта Керна .

5
ответ дан 17 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: