ValueError: alle Eingabe-arrays müssen dieselbe Anzahl von Dimensionen
Ich habe ein problem mit np.append
.
Ich versuche, duplizieren Sie die Letzte Spalte von 20x361 matrix n_list_converted
indem mithilfe des folgenden Codes:
n_last = []
n_last = n_list_converted[:, -1]
n_lists = np.append(n_list_converted, n_last, axis=1)
Aber ich bekomme Fehler:
ValueError: alle Eingabe-arrays müssen dieselbe Anzahl von Dimensionen
Jedoch, ich habe die matrix-Dimensionen zu tun
print(n_last.shape, type(n_last), n_list_converted.shape, type(n_list_converted))
bekommen und habe
(20L,) (20L, 361L)
also die Abmessungen entsprechen? Wo ist der Fehler???
Versuchen
Es hat geklappt! Aber warum?
np.column_stack
.Es hat geklappt! Aber warum?
InformationsquelleAutor odo22 | 2016-08-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich starte mit ein 3x4 array verketten, 3x1 array, mit Achse 1, bekomme ich eine 3x5-array:
Beachten Sie, dass die beiden Eingänge zum verketten von 2 Dimensionen.
Weglassen
:
, undx[:,-1]
ist (3,) Form - es ist 1d, und daher der Fehler:Den code für
np.append
ist (in diesem Fall, wo die Achse angegeben)Also mit einer leichten Veränderung der syntax
append
funktioniert. Statt einer Liste dauert es 2 Argumente. Es imitiert die Listeappend
syntax, sollte aber nicht verwechselt werden mit dieser Liste Methode.np.hstack
erste stellt sicher, dass alle Eingänge sindatleast_1d
, und dann tut verketten:So erfordert es die gleiche
x[:,-1:]
Eingang. Im wesentlichen die gleiche Aktion.np.column_stack
auch nicht ein verketten von auf Achse 1. Aber zuerst geht es 1d-inputs durchDies ist eine Allgemeine Art und Weise des Drehens, (3,) array in ein (3,1) - array.
Alle diese 'stacks' kann bequem sein, aber auf lange Sicht, es ist wichtig zu verstehen, die Abmessungen und die Basis
np.concatenate
. Auch wissen, wie, schauen Sie den code für Funktionen wie diese. Ich benutze dieipython
??
Magie viel.Und in der Zeit tests, die
np.concatenate
ist deutlich schneller - mit einem kleinen array die zusätzliche Ebenen von Funktionsaufrufen macht einen großen Unterschied.InformationsquelleAutor hpaulj
(n,) und (n,1) sind nicht die gleiche Form. Versuchen Sie, Gießen Sie den Vektor in einem array mit der
[:, None]
notation:Alternativ, wenn Sie extrahieren
n_last
können Sieum eine
(20, 1)
array.InformationsquelleAutor Aguy
Den Grund, warum Sie bekommen Ihr Fehler ist, da ein "1 von n" - matrix unterscheidet sich von einem array der Länge n.
Empfehle ich
hstack()
undvstack()
statt.Wie diese:
Bemerken, die wiederholt "7, 15, 23, 31" - Spalte.
Beachten Sie auch, dass ich
a[:,-1:]
statta[:,-1]
. Meine version erzeugt eine Spalte:Statt einer Zeile
array([7,15,23,31])
Edit:
append()
ist viel langsamer. Lesen diese Antwort.np.append
ist langsamer als Liste.append
; aber vergleichbar mit derstacks
. Es nutztnp.concatenate
.Also... Wie ich sagte, mit
append
vsstack
ist das gleiche mit 2-Matrizen undstack
ist besser für mehr als 2 Elemente, sostack
ist immer mindestens so gut wieappend
.InformationsquelleAutor RuRo