Wie, um wieder eine Ansicht von mehreren Spalten in numpy strukturierte array

Kann ich mehrere Spalten (fields) auf einmal in einem numpy strukturierten Arrays durch Indizierung mit einer Liste der Feldnamen, beispielsweise

import numpy as np

a = np.array([(1.5, 2.5, (1.0,2.0)), (3.,4.,(4.,5.)), (1.,3.,(2.,6.))],
        dtype=[('x',float), ('y',float), ('value',float,(2,2))])

print a[['x','y']]
#[(1.5, 2.5) (3.0, 4.0) (1.0, 3.0)]

print a[['x','y']].dtype
#[('x', '<f4') ('y', '<f4')])

Aber das problem ist, dass es scheint zu sein, eine Kopie, eher als einen Blick:

b = a[['x','y']]
b[0] = (9.,9.)

print b
#[(9.0, 9.0) (3.0, 4.0) (1.0, 3.0)]

print a[['x','y']]
#[(1.5, 2.5) (3.0, 4.0) (1.0, 3.0)]

Wenn ich nur eine Spalte, es ist eine Ansicht:

c = x['y']
c[0] = 99.

print c
#[ 99.  4.   3. ]

print a['y']
#[ 99.  4.   3. ]

Gibt es eine Möglichkeit, ich kann mit der Ansicht Verhalten für mehr als eine Spalte auf einmal?

Habe ich zwei workarounds, man ist einfach in einer Schleife durch die Spalten, der andere ist das erstellen einer hierarchischen dtype, so dass die eine Spalte, die tatsächlich gibt, ein strukturiertes array mit den zwei (oder mehr) Felder, die ich will. Leider zip gibt auch eine Kopie, so kann ich das nicht:

x = a['x']; y = a['y']
z = zip(x,y)
z[0] = (9.,9.)
InformationsquelleAutor askewchan | 2013-03-03
Schreibe einen Kommentar