Liste mit np.asarray

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Herzdame2608
User
Beiträge: 62
Registriert: Donnerstag 18. Juni 2020, 12:04

Ich habe folgende Listenstruktur: https://drive.google.com/file/d/1BtPcOi ... sp=sharing

Ich möchte nun eine neue Liste gestalten nur mit den points der jeweiligen Elemente. Wie kann ich das machen?

Code: Alles auswählen

Eckpunkte = []
for elements in house_elements_bounds_model:
    for points in elements:
        irgendwas mit np.asarray(KEINEAHNUNG)
Kann mir jemand helfen?
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Code: Alles auswählen

foo = [element.points for element in house_elements_bounds_model]
print(foo)
Danach kannst du immer noch ein Numpy-Array draus machen, wenn du willst.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Bitte keine Bilder posten, sondern die Datenstruktur als Text direkt hier ins Forum.
Variablennamen schreibt man komplett klein. In house_elements_bounds_model werden wohl einzelne Elemente drin sein und nicht jeweils mehrere.
`points` ist einfach nur ein Attribut, und darauf greift man mit . zu:

Code: Alles auswählen

eckpunkte = [element.points for element in house_elements_bounds_model]
Herzdame2608
User
Beiträge: 62
Registriert: Donnerstag 18. Juni 2020, 12:04

Vielen Dank euch schonmal.

Code: Alles auswählen

eckpunkte = [element.points for element in house_elements_bounds_model_copy]
numpy.asarray(eckpunkte, dtype=object)
Ich habe den o.g. Code laufen lassen, bekomme jedoch als Ausgabe: Use numpy.asarray() to access data., std::vector<Eigen::Vector3d> with 8 elements.
Obwohl ich das doch gemacht habe?! Muss ich den dtype ändern oder wie?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Bitte poste den passenden Code zur Fehlermeldung und den gesamten Traceback.
Herzdame2608
User
Beiträge: 62
Registriert: Donnerstag 18. Juni 2020, 12:04

Sirius3 hat geschrieben: Montag 26. Juli 2021, 10:23 Bitte poste den passenden Code zur Fehlermeldung und den gesamten Traceback.
Es entsteht keine Fehlermeldung, es wird eine neue Liste mit 23 Elementen generiert, wobei bei jedem Element steht: Use numpy.asarray() to access data., std::vector<Eigen::Vector3d> with 8 elements.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo kommt diese Ausgabe? Und was stört Dich daran?
Herzdame2608
User
Beiträge: 62
Registriert: Donnerstag 18. Juni 2020, 12:04

Sirius3 hat geschrieben: Montag 26. Juli 2021, 10:40 Wo kommt diese Ausgabe? Und was stört Dich daran?
Wenn ich die Liste eckpunkte beispielsweise drucken möchte kommt folgendes:

Code: Alles auswählen

[std::vector<Eigen::Vector3d> with 8 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 8 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 8 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 8 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 8 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.
 std::vector<Eigen::Vector3d> with 4 elements.
 Use numpy.asarray() to access data.          ]
Ich würde aber gerne die Zahlen sehen...
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Herzdame2608: `object` ist nur *sehr* selten ein sinnvoller `dtype` für Numpy-Arrays, denn da bieten die kaum einen Vorteil gegenüber Listen mit Objekten.

`numpy.asarray()` sollte auf die Vektor-Objekte angewendet werden, falls ich das richtig verstehe.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Herzdame2608
User
Beiträge: 62
Registriert: Donnerstag 18. Juni 2020, 12:04

__blackjack__ hat geschrieben: Montag 26. Juli 2021, 11:18 @Herzdame2608: `object` ist nur *sehr* selten ein sinnvoller `dtype` für Numpy-Arrays, denn da bieten die kaum einen Vorteil gegenüber Listen mit Objekten.

`numpy.asarray()` sollte auf die Vektor-Objekte angewendet werden, falls ich das richtig verstehe.
Ja genau. Und wie kann ich das machen?
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Nicht die Liste mit den Objekten mit `asarray()` umwandeln sondern die einzelnen Objekte. Und dann musst Du halt schauen wie das Ergebnis davon aussieht und wie man daraus dann ein Gesamtarray machen kann, falls man das braucht.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Herzdame2608
User
Beiträge: 62
Registriert: Donnerstag 18. Juni 2020, 12:04

Code: Alles auswählen

 eckpunkte = [element.points for element in house_elements_bounds_model]
    for points in eckpunkte:
        numpy.asarray(points)
Habe ich gemacht, aber da tut sich garnichts.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Herzdame2608: Natürlich tut sich da nichts. Es wird ja nichts mit dem `numpy.asarray()`-Ergebnissen gemacht. So eine Funktion kann nicht auf magische Weise den Datentyp seines Arguments ändern.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Edit: irgendwie verrutscht.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Ich glaube das ist das falsche Thema für diese Antwort. Oder war das Absicht? 😎
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

__blackjack__ hat geschrieben: Montag 26. Juli 2021, 16:19 @__deets__: Ich glaube das ist das falsche Thema für diese Antwort. Oder war das Absicht? 😎
Danke. Was auch immer das Form da gebaut hat, das war woanders gedacht, ja.
Herzdame2608
User
Beiträge: 62
Registriert: Donnerstag 18. Juni 2020, 12:04

__blackjack__ hat geschrieben: Montag 26. Juli 2021, 12:48 @Herzdame2608: Natürlich tut sich da nichts. Es wird ja nichts mit dem `numpy.asarray()`-Ergebnissen gemacht. So eine Funktion kann nicht auf magische Weise den Datentyp seines Arguments ändern.
Und wie kann ich dann zum gewünschten Ergebnis gelangen?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Was ist denn das Ergebnis, wenn Du einfach dieses unsinnige dtype=object wegläßt?

Code: Alles auswählen

eckpunkte = numpy.array([element.points for element in house_elements_bounds_model])
Herzdame2608
User
Beiträge: 62
Registriert: Donnerstag 18. Juni 2020, 12:04

Es entsteht folgender Fehler:
VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
return array(a, dtype, copy=False, order=order)

Ich kann mir durch

Code: Alles auswählen

x = np.asarray(eckpunkte[1])
einen Datensatz aus der Liste ausgeben lassen, ich bräuchte nur die Möglichkeit, das für alle 23 Elemente aus der Liste zu machen.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Ok, dann haben die einzelnen Einträge unterschiedlich viele Punkte.
Wenn man etwas mit allen Elementen einer Liste machen möchte, dann benutzt man dafür eine Schleife.
Antworten