TypeError: Nur length-1-Arrays können in Python-Skalare konvertiert werden, während plot zeigt

8

Ich habe solchen Python-Code:

%Vor%

Und solcher Fehler:

%Vor%

Wie kann ich es beheben?

    
K. Kovalev 17.04.2016, 18:21
quelle

3 Antworten

10

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 :

%Vor%

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 ).

    
ayhan 17.04.2016, 18:32
quelle
3

Verwenden:

%Vor%

Hier ist die Referenz .

    
FFT 20.02.2017 17:26
quelle
1

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?

%Vor%     
roganjosh 17.04.2016 18:30
quelle

Tags und Links