Seite 1 von 1
Numpyarray to string funktioniert nicht
Verfasst: Mittwoch 10. Juni 2020, 14:10
von naheliegend
Hi,
kann sein, dass das eine "dumme" Frage ist, aber ich habe versucht von einem Objektattribut den Inhalt von einem numpy.int32 typ zu einem String zu machen.
Code: Alles auswählen
clf = DecisionTreeClassifier(max_depth=5)
print(type(clf.classes_))
print(type(clf.classes_[0]))
map(str, clf.classes_)
print(type(clf.classes_[0]))
Output:
Code: Alles auswählen
<class 'numpy.ndarray'>
<class 'numpy.int32'>
<class 'numpy.int32'>
nachdem ich den Inhalt von clf.classes_ in einer separaten Variable gespeichert habe, hat es funktioniert.
Verstehe nur nicht warum
Liebe Grüße und danke.
Re: Numpyarray to string funktioniert nicht
Verfasst: Mittwoch 10. Juni 2020, 14:41
von __blackjack__
@naheliegend: Deine `map()`-Zeile macht halt nix. Da wird ein Iterator erstellt der die `str()`-Funktion auf die Elemente von `clf.classes_` anwenden *würde*, wenn man sie denn abfragen würde, beispielsweise durch Iteration. Aber das Iteratorobjekt wird dann einfach verworfen, weil damit nix gemacht wird.
Und wenn man über das Objekt iteriert, dann verändert das auch nichts an `clf.classes_` oder dessen Elementen weil `str()` das Argument ja nicht verändert, sondern eine Zeichenkette als Ergebnis liefert.
Re: Numpyarray to string funktioniert nicht
Verfasst: Mittwoch 10. Juni 2020, 14:54
von naheliegend
__blackjack__ hat geschrieben: ↑Mittwoch 10. Juni 2020, 14:41
@naheliegend: Deine `map()`-Zeile macht halt nix. Da wird ein Iterator erstellt der die `str()`-Funktion auf die Elemente von `clf.classes_` anwenden *würde*, wenn man sie denn abfragen würde, beispielsweise durch Iteration. Aber das Iteratorobjekt wird dann einfach verworfen, weil damit nix gemacht wird.
Und wenn man über das Objekt iteriert, dann verändert das auch nichts an `clf.classes_` oder dessen Elementen weil `str()` das Argument ja nicht verändert, sondern eine Zeichenkette als Ergebnis liefert.
Danke. Das habe ich ja dann auch irgendwie gemerkt. Aber mal angenommen, man würde da wirklich den Datentyp ändern wollen. How does it work?
Re: Numpyarray to string funktioniert nicht
Verfasst: Mittwoch 10. Juni 2020, 15:18
von __blackjack__
@naheliegend: So wirklich gar nicht. Man kann ein neues Array erstellen das Elemente vom Typ `object` aufnehmen kann und das mit den umgewandelten Werten füllen. Aber solche Arrays machen in der Regel wenig Sinn, da würde man eine Liste für nehmen. Also beispielsweise noch ein `list()`-Aufruf auf den Iterator, damit der abgearbeitet wird und die Ergebnisse in einer Liste landen. Und dann muss man das Ergebnis noch an einen Namen binden oder anderweitig verwenden.
Re: Numpyarray to string funktioniert nicht
Verfasst: Mittwoch 10. Juni 2020, 15:32
von einfachTobi
Ein Numpy-Array kannst du mit der
astype-Methode casten.
Code: Alles auswählen
import numpy as np
arr = np.random.sample((5, 5))
print(arr)
print(arr.astype(str))
Den Datentyp eines Klassenarributes zu ändern scheint mir eher unglücklich, denn ich gehe davon aus, dass dort aus gutem Grund ein bestimmte Typ verwendet wurde. Ich kenne deine Klasse nicht, aber das sähe dann so aus:
Re: Numpyarray to string funktioniert nicht
Verfasst: Donnerstag 11. Juni 2020, 10:17
von Sirius3
Und benutzt keine Abkürzungen, wenn `classifier` gemeint ist, dann sollte man die Variable nicht `clf` nennen.