Konvertiere das Map Objekt in ein numpy Array in Python 3

9

In Python 2 konnte ich Folgendes tun:

%Vor%

In Python 3 funktioniert es nicht mehr:

%Vor%

Wie bekomme ich das alte Verhalten (Konvertierung der map Ergebnisse in numpy Array)?

Bearbeiten : Wie @jonrsharpe in seiner Antwort darauf hingewiesen hat, könnte dies behoben werden, wenn ich seq zuerst in eine Liste umwandelte:

%Vor%

aber ich möchte den zusätzlichen Aufruf von list vermeiden.

    
btel 15.02.2015, 08:40
quelle

2 Antworten

15

Eine weitere Alternative, neben den gültigen Lösungen, auf die @jonrsharpe bereits hingewiesen hat, ist np.fromiter :

%Vor%     
Oliver W. 15.02.2015 13:18
quelle
5

Obwohl Sie auf seq verweisen, ist das Objekt map in Python 3 nicht eine Sequenz (es ist ein Iterator ) Siehe was ist neu in Python 3 ). numpy.array benötigt eine Sequenz, damit die len bestimmt und die entsprechende Menge an Speicher reserviert werden kann; Es wird keinen Iterator verbrauchen. Zum Beispiel kann das Objekt range , das die meisten Sequenzoperationen unterstützt kann direkt übergeben werden;

%Vor%

Um das vorherige Verhalten wiederherzustellen, können Sie, wie Sie wissen, das Objekt map explizit in eine Sequenz (z. B. Liste oder Tupel) konvertieren:

%Vor%

Wie jedoch die Dokumentation setzt :

  

Eine schnelle Lösung besteht darin, map() in list() , z. list(map(...)) , aber eine bessere Lösung ist oft, ein Listenverständnis zu verwenden (besonders wenn der Originalcode lambda verwendet)

Also wäre eine andere Option:

%Vor%

oder einfach:

%Vor%

Alternativ verwenden Sie numpy von Anfang an:

%Vor%     
jonrsharpe 15.02.2015 08:48
quelle

Tags und Links