2010-06-17 12 views
6

Das folgende Beispiel zeigt die Zuordnung, was ich tun möchte:Python Numpy Structured Array (recarray) Werte in Scheiben

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

Also, ich will (1,1)-test[['ifAction', 'ifDocu']][0] die Werte zuweisen. (Schließlich möchte ich etwas wie test[['ifAction', 'ifDocu']][0:10] = (1,1) tun, für 0:10 die gleichen Werte für die Zuordnung. Ich habe viele Möglichkeiten ausprobiert, aber nie gelungen. Gibt es eine Möglichkeit, dies zu tun?

Danke, Joon

+1

Siehe auch @ HYRY's [Antwort auf eine etwas andere Frage] (http://Stackoverflow.com/a/21819324/347815), die eine großartige Lösung für dieses Problem gibt. – katahdin

Antwort

4

Wenn Sie sagen test['ifAction'] Sie erhalten einen Blick auf die Daten. Wenn Sie sagen, test[['ifAction','ifDocu']] Sie Fantasy-indexing und damit eine Kopie der Daten zu erhalten. Die Kopie hilft Ihnen nicht, da die Änderung der Kopie die ursprünglichen Daten unverändert lässt.

Also ein Weg um dies zu tun ist, Werte test['ifAction'] undzuweiseneinzeln:

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

Zum Beispiel:

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

Für einen tieferen Blick unter die Motorhaube finden this post by Robert Kern.

+0

Vielen Dank. Das Problem lag also beim Feldzugriff. – joon

Verwandte Themen