Ich kann mehrere Spalten (fields
) gleichzeitig in einem strukturierten numpy
Array sehen, indem ich mit einer Liste der Feldnamen indiziere, zum Beispiel
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', '
``Aber das Problem ist, dass es anscheinend eine Kopie und keine Ansicht zu sein scheint:
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 auswähle, ist es eine Ansicht:
c = x['y']
c[0] = 99.
print c
#[ 99. 4. 3. ]
print a['y']
#[ 99. 4. 3. ]
Gibt es einen Weg, um das Ansichtsverhalten für mehr als eine Spalte gleichzeitig zu erhalten?
Ich habe zwei Workarounds, einen ist einfach durch die Spalten zu iterieren, der andere ist die Erstellung eines hierarchischen dtype
, sodass die eine Spalte tatsächlich ein strukturiertes Array mit den beiden (oder mehr) Feldern zurückgibt, die ich möchte. Leider gibt auch zip
eine Kopie zurück, also kann ich nicht folgendes tun:
x = a['x']; y = a['y']
z = zip(x,y)
z[0] = (9.,9.)``