Seite 1 von 1

Array einzelne Spalte auslesen/ändern

Verfasst: Freitag 29. Januar 2010, 11:16
von redbomberle
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?

Verfasst: Freitag 29. Januar 2010, 11:48
von Defnull
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.

Verfasst: Freitag 29. Januar 2010, 12:42
von redbomberle
also du meinst mit:

Code: Alles auswählen

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

Code: Alles auswählen

transform(data)

Verfasst: Freitag 29. Januar 2010, 13:21
von gkuhl
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