Pregunta

El siguiente ejemplo muestra lo que quiero hacer:

>>> 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)

Por lo tanto, quiero asignar los valores (1,1) a test[['ifAction', 'ifDocu']][0]. (Con el tiempo, quiero hacer algo como test[['ifAction', 'ifDocu']][0:10] = (1,1), la asignación de los mismos valores para para 0:10. He intentado muchas maneras, pero nunca tuvo éxito. ¿Hay alguna manera de hacer esto?

Gracias, Joon

¿Fue útil?

Solución

Cuando dice test['ifAction'] se obtiene una vista de los datos. Cuando se dice que está utilizando test[['ifAction','ifDocu']] suposición-indexación y de este modo obtener una copia de los datos. La copia no le ayuda, ya la modificación de las hojas de copia de los datos originales sin cambios.

Así que una manera de evitar esto es asignar valores a test['ifAction'] y test['ifDocu'] individual:

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

Por ejemplo:

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)]

Para una mirada más profunda bajo el capó, ver este post por Robert Kern .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top