ich denke, dass Ihr Problem ist, dass Sie np.append
erwarten, dass die Spalte in-place hinzufügen, aber was es tut, weil, wie numpy Daten gespeichert sind, ist eine Kopie der verbundenen Arrays erstellen
Returns
-------
append : ndarray
A copy of `arr` with `values` appended to `axis`. Note that `append`
does not occur in-place: a new array is allocated and filled. If
`axis` is None, `out` is a flattened array.
so müssen Sie die Ausgabe all_data = np.append(...)
speichern:
my_data = np.random.random((210,8)) #recfromcsv('LIAB.ST.csv', delimiter='\t')
new_col = my_data.sum(1)[...,None] # None keeps (n, 1) shape
new_col.shape
#(210,1)
all_data = np.append(my_data, new_col, 1)
all_data.shape
#(210,9)
Alternative Wege:
all_data = np.hstack((my_data, new_col))
#or
all_data = np.concatenate((my_data, new_col), 1)
Ich glaube, dass der einzige Unterschied zwischen diesen drei Funktionen (sowie np.vstack
) sind ihr Standardverhalten für, wenn axis
nicht angegeben ist:
concatenate
annimmt axis = 0
hstack
annimmt axis = 1
es sei denn Eingänge 1d, dann axis = 0
vstack
annimmt axis = 0
nachdem eine Achse Zugabe, wenn die Eingänge 1d
append
flacht Array
Basierend auf Dein Kommentar, und wenn du dir deinen Beispielcode näher ansiehst, glaube ich jetzt, dass du das a ist wahrscheinlich auf der Suche ist zu tun, um ein Feld zu einem record array hinzuzufügen. Sie importiert sowohl genfromtxt
, die eine structured array und recfromcsv
gibt, die die auf subtile Weise anders record array (recarray
) zurückgibt. Sie verwendet recfromcsv
so jetzt my_data
ist eigentlich eine recarray
, was bedeutet, dass wahrscheinlich my_data.shape = (210,)
seit Rekarrays sind 1d Arrays von Datensätzen, wobei jeder Datensatz ein Tupel mit dem angegebenen dtype ist.
So könnte man dies versuchen:
import numpy as np
from numpy.lib.recfunctions import append_fields
x = np.random.random(10)
y = np.random.random(10)
z = np.random.random(10)
data = np.array(list(zip(x,y,z)), dtype=[('x',float),('y',float),('z',float)])
data = np.recarray(data.shape, data.dtype, buf=data)
data.shape
#(10,)
tot = data['x'] + data['y'] + data['z'] # sum(axis=1) won't work on recarray
tot.shape
#(10,)
all_data = append_fields(data, 'total', tot, usemask=False)
all_data
#array([(0.4374783740738456 , 0.04307289878861764, 0.021176067323686598, 0.5017273401861498),
# (0.07622262416466963, 0.3962146058689695 , 0.27912715826653534 , 0.7515643883001745),
# (0.30878532523061153, 0.8553768789387086 , 0.9577415585116588 , 2.121903762680979),
# (0.5288343561208022 , 0.17048864443625933, 0.07915689716226904 , 0.7784798977193306),
# (0.8804269791375121 , 0.45517504750917714, 0.1601389248542675 , 1.4957409515009568),
# (0.9556552723429782 , 0.8884504475901043 , 0.6412854758843308 , 2.4853911958174133),
# (0.0227638618687922 , 0.9295332854783015 , 0.3234597575660103 , 1.275756904913104),
# (0.684075052174589 , 0.6654774682866273 , 0.5246593820025259 , 1.8742119024637423),
# (0.9841793718333871 , 0.5813955915551511 , 0.39577520705133684 , 1.961350170439875),
# (0.9889343795296571 , 0.22830104497714432, 0.20011292764078448 , 1.4173483521475858)],
# dtype=[('x', '<f8'), ('y', '<f8'), ('z', '<f8'), ('total', '<f8')])
all_data.shape
#(10,)
all_data.dtype.names
#('x', 'y', 'z', 'total')
Und was ist dies nicht funktioniert? –
Die Sache, die nicht funktioniert, ist, dass es mir nicht die richtigen Dimensionen gibt, egal welche Version ich versuche. – user2130951