2017-07-14 5 views

Antwort

-1

Sie können verschachtelte Arrays die gleiche Art und Weise bauen Sie verschachtelte Listen erstellen:

nested_list = [['a',1],['b',2],['c',3]] 

import numpy as np 
nested_array = np.array(nested_list) 
2

Ja, etwa so:

engine_dt = np.dtype([('volume', float), ('cylinders', int)]) 
car_dt = np.dtype([('color', int, 3), ('engine', engine_dt)]) # nest the dtypes 

cars = np.rec.array([ 
    ([255, 0, 0], (1.5, 8)), 
    ([255, 0, 255], (5, 24)), 
], dtype=car_dt) 

print(cars.engine.cylinders) 
# array([ 8, 24]) 

Die np.dtype Funktion hier nicht unbedingt notwendig ist, aber es ist in der Regel ein gute Idee, und gibt einen kleinen Speed-Boost über array lassen Sie es jedes Mal anrufen.

Beachten Sie, dass rec.array hier nur erforderlich ist, um die Notation .engine zu verwenden. Wenn Sie eine einfache np.array verwenden, dann würden Sie verwenden cars['engine']['cylinders']

+0

Die Daten für 'Autos' müssen korrekt verschachtelt sein (richtige Mischung aus [] und()). Das kann eine Fehlerquelle sein. Beim Laden von 'csv' kann 'genfromtxt' jedoch eine' flache 'Liste von Spalten verwenden, solange genügend Daten vorhanden sind. – hpaulj

+0

Einfach überprüft: 'genfromtxt' erstellt zuerst ein Array mit einer abgeflachten Version des' dtype' und gibt dann eine Ansicht mit dem verschachtelten dtype zurück. – hpaulj

+0

Kann dies mit Listen unterschiedlicher Länge gemacht werden? Z.B. Wie würde es aussehen, wenn ich dem '' car_dt'' ein Feld '' photo' 'hinzufügen möchte, das ein zweidimensionales Array unbekannter Größe und Typ int ist? (Lassen Sie uns der Einfachheit halber ein schwarzweißes Bild verwenden) – lumbric