Ich habe solchen Python-Code:
%Vor%Und solcher Fehler:
%Vor%Wie kann ich es beheben?
Der Fehler "Nur Länge-1-Arrays können in Python-Skalare konvertiert werden" wird ausgelöst, wenn die Funktion einen einzelnen Wert erwartet, Sie aber stattdessen ein Array übergeben.
Wenn Sie sich die Call-Signatur von np.int
ansehen, werden Sie sehen, dass sie einen einzelnen Wert und kein Array akzeptiert. Wenn Sie eine Funktion anwenden möchten, die ein einzelnes Element für jedes Element in einem Array akzeptiert, können Sie im Allgemeinen np.vectorize
:
Sie können die Definition von f (x) überspringen und np.int einfach an die Vektorisierungsfunktion übergeben: f2 = np.vectorize(np.int)
.
Beachten Sie, dass np.vectorize
nur eine Komfortfunktion und im Grunde eine for-Schleife ist. Das wird bei großen Arrays ineffizient sein. Wann immer Sie die Möglichkeit haben, verwenden Sie wirklich vektorisierte Funktionen oder Methoden (wie astype(int)
als @FFT empfiehlt ).
Beachten Sie, was für x
gedruckt wird. Sie versuchen, ein Array (im Grunde nur eine Liste) in ein int zu konvertieren. length-1
wäre ein Array aus einer einzelnen Zahl, von der ich annehme, dass numpy nur als Float behandelt wird. Sie könnten dies tun, aber es ist keine rein numpige Lösung.
EDIT: Ich war vor ein paar Wochen in einem Post involviert, bei dem eine Operation langsamer war, als ich erwartet hatte, und ich merkte, dass ich in eine Standardhaltung verfallen war, dass Numpy immer der Weg zur Geschwindigkeit war. Da meine Antwort nicht so sauber war wie die von Ayhan, dachte ich, ich würde diesen Platz verwenden, um zu zeigen, dass dies eine weitere Instanz ist, die zeigt, dass vectorize
ungefähr 10% langsamer ist als das Erstellen einer Liste in Python. Ich weiß nicht genug darüber, warum es so ist, aber vielleicht jemand anderes?