Hier ist eine andere Möglichkeit, diesen Fehler in Python2.7 mit numpy zu reproduzieren:
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.concatenate(a,b)
print(c)
Die np.concatenate
Methode erzeugt einen Fehler:
TypeError: only length-1 arrays can be converted to Python scalars
Wenn Sie die Dokumentation zu numpy.concatenate lesen , wird ein Tupel von numpy-Array-Objekten erwartet. Das Umgeben der Variablen mit Parens hat es also behoben:
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.concatenate((a,b))
print(c)
Dann druckt es:
[1 2 3 4 5 6]
Was ist hier los?
Dieser Fehler ist ein Fall von Bubble-Up-Implementierung - er wird durch die Ententypisierungsphilosophie von Python verursacht. Dies ist ein kryptischer Low-Level-Fehler, den Python-Eingeweide kotzen, wenn er einige unerwartete Variablentypen empfängt, versucht, wegzulaufen und etwas zu tun, teilweise durchkommt, die Kotzen, Abhilfemaßnahmen versucht, fehlschlägt und Ihnen dann sagt, dass "Sie können". t die Subraum-Responder neu formulieren, wenn der Wind am Dienstag aus dem Osten weht ".
In vernünftigeren Sprachen wie C ++ oder Java hätte es Ihnen gesagt: "Sie können keinen TypeA verwenden, bei dem TypeB erwartet wurde". Aber Python tut es am besten, wenn man Soldat ist, etwas Undefiniertes tut, fehlschlägt und Ihnen dann einen nicht hilfreichen Fehler zurückgibt. Die Tatsache, dass wir darüber diskutieren müssen, ist einer der Gründe, warum ich Python oder seine Ententypisierungsphilosophie nicht mag.
TypeError: Don't feed native python lists into numpy functions that expect numpy arrays. Either convert your python list to a numpy array or package your python lists into a tuple.
Python Numpy hat den Ball wirklich auf diesen fallen lassen, diese Fehlermeldung ist schrecklich.