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

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.

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.