Betrachten Sie das folgende einfache Beispiel:
%Vor%Man wird den folgenden Fehler erhalten:
%Vor%Wenn das Array keine Titel hat, funktioniert es
%Vor%Wenn ich die Namen von x und y lösche, funktioniert das auch.
Frage: Wie verketten, vstack oder stack of titled numpy array? Hinweis: numpy.lib.recfunctions.stack_arrays funktioniert auch nicht gut
Das Problem ist, dass die Typen unterschiedlich sind. Der "Titel" ist Teil des Typs und y
verwendet andere Namen von x
, daher sind die Typen inkompatibel. Wenn Sie kompatible Typen verwenden, funktioniert alles:
Manchmal ist dstack
usw. schlau genug, um Typen sinnvoll zu erzwingen, aber numpy
hat keine Möglichkeit zu wissen, wie man Datensatz-Arrays mit verschiedenen benutzerdefinierten Feldnamen kombiniert.
Wenn Sie die Datentypen verketten möchten, müssen Sie einen neuen Datentyp erstellen. Machen Sie nicht den Fehler zu denken, dass die Reihenfolge der Namen ( x['a']
, x['b']
...) eine wahre Dimension des Arrays darstellt; x
und y
oben sind 1-d-Arrays von Speicherblöcken, von denen jeder zwei 32-Bit-Floats enthält, auf die mit den Namen 'a'
und 'b'
zugegriffen werden kann. Wenn Sie jedoch auf ein einzelnes Element im Array zugreifen, erhalten Sie kein anderes Array, als wenn es sich wirklich um eine zweite Dimension handeln würde. Sie können den Unterschied hier sehen:
Dies ermöglicht Record-Arrays, heterogene Daten zu enthalten; Record-Arrays können sowohl Strings als auch Ints enthalten, aber der Nachteil besteht darin, dass Sie nicht die volle Leistung von ndarray
auf der Ebene einzelner Datensätze erhalten.
Das Ergebnis ist, dass Sie die dtype
des Arrays ändern müssen, um einzelne Speicherblöcke zu verbinden. Es gibt ein paar Möglichkeiten, dies zu tun, aber das Einfachste, was ich finden könnte, betrifft die wenig bekannte numpy.lib.recfunctions
-Bibliothek (die, wie Sie sehen, bereits gefunden haben!):