Array einzelne Spalte auslesen/ändern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
redbomberle
User
Beiträge: 19
Registriert: Dienstag 21. Oktober 2008, 18:28

hi zusammen,
ich habe eine Frage wie ich genau einen array (verwende numpy) effizient bearbeiten kann/muss:

Stellt euch folgenden Array vor:

Code: Alles auswählen

data=[[0.,1.,4.,5.],
[3.,5.,3.,2.,6.],
...
[0.,1.,4.,5.],
[3.,5.,3.,2.,6.]]

Code: Alles auswählen

print len(data)=1000000
print len(data[0])=4
nun möchte ich eine Spalte von diesem Array analysieren, also führe darauf Berechnungen aus. Also extrahiere ich sehr mühsam eine beliebige Spalte n dieses Arrays:

Code: Alles auswählen

data_temp=[]
for i in range(0,len(data)):
    data_temp.append(data[i][n])
nun habe ich die eine spalte extrahiert!
darauf führe ich berechnungen aus, ändere Werte und möchte diesen ARray wieder in meinen ursprünglichen Array einfügen:

Code: Alles auswählen

for i in range(0,len(data)):
    data[i][n]=data_temp[i]
das geht bestimmt irgendwie einfacher oder?
habe es mit der funktion

Code: Alles auswählen

take(data,(n,)) 
versucht
was aber nicht funktioniert hat.
Habt ihr mir einen Tip?
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Ist es nicht vielleicht eine Option, die Achsen deiner Daten vorher zu vertauschen? Also eine 4x10000 Matrix statt eine 10000x4. Dann wäre das Rechnen auf der Spalte (die dann ja eine Zeile ist) trivial.
Bottle: Micro Web Framework + Development Blog
redbomberle
User
Beiträge: 19
Registriert: Dienstag 21. Oktober 2008, 18:28

also du meinst mit:

Code: Alles auswählen

transform(data)
... dann irgendwelche Berechnungen
und danach wieder

Code: Alles auswählen

transform(data)
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Du kannst auf die Spalten direkt per Slicing zugreifen:

Code: Alles auswählen

In [49]: A
Out[49]: 
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11],
       [12, 13],
       [14, 15],
       [16, 17],
       [18, 19]])

In [50]: A[:,1]
Out[50]: array([ 1,  3,  5,  7,  9, 11, 13, 15, 17, 19])

In [51]: A[4,:]
Out[51]: array([8, 9])
Grüße
Gerrit


Edit: Das dürfte für dich interessant sein: http://www.scipy.org/Cookbook/Indexing
Antworten