2016-07-29 6 views
1

Ich habe eine leere Liste Array deklariert, als solche:Wie kann ich NumPy zwingen, eine Liste als Objekt anzuhängen?

r = np.array([])

Und ich habe eine Operation, die auf jeder Schleife ein Array von Werten zu r hinzufügt. Nehmen wir an, die erste Schleife fügt [1,2,3] hinzu und die nächste fügt [4,5,6,7] hinzu. Wie kann ich an das Array r anhängen, während die Argumente append als Objekte anstatt elementweise gezwungen werden?

Bedeutung, möchte ich dies, nachdem es fertig ist:

r = np.array([[1, 2, 3], [4, 5, 6, 7]])

, wo ich es annehmen, dass dtype = object erforderlich wäre. Oder zumindest denke ich das, was ich will.

Wenn ich

r = np.append(r, [1,2,3]) 
r = np.append(r, [4,5,6,7]) 

ich

r = np.array([1., 2., 3., 4., 5., 6., 7.])

Das einzige Problem ist, ich brauche diese in einer bestimmten Art und Weise später zu verwenden. Ich muss in der Lage sein, auf die Unterlisten einzeln zuzugreifen und Operationen an ihnen durchzuführen, aber ich muss später auch in der Lage sein, auf das Array als Ganzes zuzugreifen. Normalerweise würde ich eine np.ravel machen, um dies zu bekommen, aber ich kann das nicht tun, wenn die Sub-Arrays keine übereinstimmenden Längen haben (sie werden nicht).

+0

"Ich habe eine leere Liste erklärt, als solche:' r = np.array ([]) '" -, dass ein Array ist. Es sagt "Array" genau dort. Es ist wirklich wichtig, sich der Unterschiede zwischen Listen und Arrays bewusst zu sein, da sie völlig anders gestaltet sind, und die Verwendung des falschen kann Ihre Leistung zerstören oder zu Bugs führen, wie Sie sie jetzt haben. – user2357112

+0

@ user2357112 Sorry, ich meinte Array. Natürlich verwechsle ich Listen und Arrays nicht, da diese Aufgabe mit einer normalen Python-Liste sehr einfach ist. – Anonymous

+2

Sie * sollten * eine normale Python-Liste verwenden. Sie erhalten keine Vorteile und alle Nachteile von NumPy, indem Sie die Dinge auf diese Weise tun. 'Anhängen an ein Array ist verrückt langsam, besonders wenn Sie es immer und immer wieder tun. – user2357112

Antwort

2

können Sie eine Liste Verständnis verwenden, wenn das Array zu erstellen:

>>> np.array([row for row in [1, 2, 3], [4, 5, 6, 6]]) 
array([[1, 2, 3], [4, 5, 6, 6]], dtype=object) 
+0

Das würde funktionieren, aber es ist nicht sehr elegant, würde ich eine pure-numpy Antwort bevorzugen. Außerdem muss ich die Sub-Arrays nacheinander hinzufügen, dynamisch – Anonymous

+0

@jphollowed Numpy war nicht für solche Operationen gedacht. Es ist nicht effizienter als normale Listen. Verwenden Sie stattdessen normale Python-Listen. Was ist dein Endziel? Warum benötigen Sie ein Array von Listenobjekten? – Praveen

+2

'append' ist nicht elegant in der' numpy' Operation. Es ist eine natürliche "Listen" -Operation, aber eine erfundene "numpige". Erstellen Sie Ihre Liste "dynamisch" und konvertieren Sie sie, falls überhaupt, am Ende in ein Array. – hpaulj

Verwandte Themen