Seite 1 von 1

Numpy Structured Array aus mehreren Arrays erzeugen

Verfasst: Freitag 25. Juni 2021, 14:46
von rogerb
Hallo zusammen,

weiß jemand wie man mehrere numpy arrays zu einem structured array mit verschiedenen Datentypen zusammensetzt?

Code: Alles auswählen

import numpy as np

column1 = np.array([1, 2, 3])
column2 = np.array(["A", "B", "C"])

data_types = dtype=([("column1", int), ("column2", str)])

target = np.stack((column1, column2), axis=1)
Mit np.stack() kann ich die arrays zwar zusammenfügen, da np.stack() aber keinen dtype akzeptiert, enthält das neue array nur strings.

Code: Alles auswählen

[['1' 'A']
 ['2' 'B']
 ['3' 'C']]
 
Gewünscht währe etwas in der Art:

Code: Alles auswählen

[(1 'A')
 (2 'B')
 (3 'C')]

Re: Numpy Structured Array aus mehreren Arrays erzeugen

Verfasst: Freitag 25. Juni 2021, 15:05
von __blackjack__
Man könnte vorher eine entsprechende Liste mit Tupeln erstellen:

Code: Alles auswählen

In [15]: data_types = dtype=([("column1", int), ("column2", "S1")])             

In [16]: target = np.array(list(zip(column1, column2)), dtype=data_types)       

In [17]: target                                                                 
Out[17]: 
array([(1, b'A'), (2, b'B'), (3, b'C')],
      dtype=[('column1', '<i8'), ('column2', 'S1')])
Oder ein leeres Array erstellen und dann die Spaltenwerte zuweisen:

Code: Alles auswählen

In [18]: target = np.zeros(len(column1), dtype=data_types)                      

In [19]: target                                                                 
Out[19]: 
array([(0, b''), (0, b''), (0, b'')],
      dtype=[('column1', '<i8'), ('column2', 'S1')])

In [20]: target["column1"] = column1                                            

In [21]: target                                                                 
Out[21]: 
array([(1, b''), (2, b''), (3, b'')],
      dtype=[('column1', '<i8'), ('column2', 'S1')])

In [22]: target["column2"] = column2                                            

In [23]: target                                                                 
Out[23]: 
array([(1, b'A'), (2, b'B'), (3, b'C')],
      dtype=[('column1', '<i8'), ('column2', 'S1')])

Re: Numpy Structured Array aus mehreren Arrays erzeugen

Verfasst: Freitag 25. Juni 2021, 15:15
von rogerb
Super! Vielen Dank!