Seite 1 von 2
Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 08:37
von Herzdame2608
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?
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 09:04
von einfachTobi
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.
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 09:08
von Sirius3
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]
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 09:45
von Herzdame2608
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?
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 10:23
von Sirius3
Bitte poste den passenden Code zur Fehlermeldung und den gesamten Traceback.
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 10:30
von Herzdame2608
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.
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 10:40
von Sirius3
Wo kommt diese Ausgabe? Und was stört Dich daran?
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 10:49
von Herzdame2608
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...
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 11:18
von __blackjack__
@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.
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 11:22
von Herzdame2608
__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?
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 12:03
von __blackjack__
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.
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 12:31
von Herzdame2608
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.
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 12:48
von __blackjack__
@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.
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 13:11
von __deets__
Edit: irgendwie verrutscht.
Re: Liste mit np.asarray
Verfasst: Montag 26. Juli 2021, 16:19
von __blackjack__
@__deets__: Ich glaube das ist das falsche Thema für diese Antwort. Oder war das Absicht?

Re: Liste mit np.asarray
Verfasst: Dienstag 27. Juli 2021, 07:57
von __deets__
__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.
Re: Liste mit np.asarray
Verfasst: Dienstag 27. Juli 2021, 11:07
von Herzdame2608
__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?
Re: Liste mit np.asarray
Verfasst: Dienstag 27. Juli 2021, 11:14
von Sirius3
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])
Re: Liste mit np.asarray
Verfasst: Dienstag 27. Juli 2021, 11:31
von Herzdame2608
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
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.
Re: Liste mit np.asarray
Verfasst: Dienstag 27. Juli 2021, 11:37
von Sirius3
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.