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:
aber ich möchte den zusätzlichen Aufruf von list
vermeiden.
Eine weitere Alternative, neben den gültigen Lösungen, auf die @jonrsharpe bereits hingewiesen hat, ist np.fromiter
:
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;
Um das vorherige Verhalten wiederherzustellen, können Sie, wie Sie wissen, das Objekt map
explizit in eine Sequenz (z. B. Liste oder Tupel) konvertieren:
Wie jedoch die Dokumentation setzt :
Eine schnelle Lösung besteht darin,
map()
inlist()
, z.list(map(...))
, aber eine bessere Lösung ist oft, ein Listenverständnis zu verwenden (besonders wenn der Originalcodelambda
verwendet)
Also wäre eine andere Option:
%Vor%oder einfach:
%Vor% Alternativ verwenden Sie numpy
von Anfang an:
Tags und Links python python-3.x numpy