<class 'float'> in array

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Meinnamegehtdichga
User
Beiträge: 13
Registriert: Donnerstag 8. August 2019, 16:23

Hallo, ich habe ein Problem. Ich habe ein Programm in Python, welches Bilder in Arrays umwandeln soll. Ich nehme dafür das img_to_array Modul von Keras.
Allerdings steht in den Array: array([<class 'float'>, 66.0, 98.0, ..., 244.0, 254.0, 255.0], dtype=object).
Was macht dieses class "float" und das dtype=object dort? Und was kann ich machen, damit dieses verschwindet? Ich möchte die Werte des Arrays in Float Werte konvertieren, aber durch diese 2 Sachen geht das nicht.
Danke für eure Hilfe
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das IST ein Array. Ein numpy Array. Die String Repräsentation davon verrät Dir ein paar Details über dieses Array, das hat aber keinen Einfluss auf dessen benutzbarkeit.
Benutzeravatar
__blackjack__
User
Beiträge: 13110
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Naja nicht wirklich. Also ja, das ist ein Numpy-Array, aber die Elemente haben den Typ `object`. Und das erste Element scheint tatsächlich die `float`-Klasse zu sein. Also alles sehr wenig sinnvoll und nicht wirklich ”benutzbar”. Wäre die Frage wie dieser unsinnige Wert zustande gekommen ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
__blackjack__
User
Beiträge: 13110
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Also mal wie man diesen Unsinn nachstellen kann:

Code: Alles auswählen

In [2]: np.array([float, 66.0, 98.0, 244.0, 254.0])                             
Out[2]: array([<class 'float'>, 66.0, 98.0, 244.0, 254.0], dtype=object)
Edit: Zumal die Wert auch nicht aussehen als würden sie Gebrauch davon machen das sie Nachkommastellen haben. Das sieht verdächtig nach Bytewerten aus.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Meinnamegehtdichga
User
Beiträge: 13
Registriert: Donnerstag 8. August 2019, 16:23

Sicher? Dann habe ich die Fehlermeldung falsch interpretiert.
Bei der Zeile: X = X.astype(float) kommt die Fehlermeldung: float() argument must be a string or a number, not 'type'. Was meint das denn dann, und was kann ich dagegen tun? Habe ich diesen Fehler falsch interpretiert?
Benutzeravatar
__blackjack__
User
Beiträge: 13110
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Meinnamegehtdichga: Das meint, dass man die `float`-Klasse, die den Datentyp `type` hat, nicht in eine Gleitkommazahl umwandeln kann. Was sollte da auch bei heraus kommen?

Code: Alles auswählen

In [4]: type(float)                                                             
Out[4]: type

In [5]: float(float)                                                            
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-257427a01c1d> in <module>
----> 1 float(float)

TypeError: float() argument must be a string or a number, not 'type'
Wie kommt dieses Array denn zustande? *Der* Code ist falsch und sollte korrigiert werden, statt da jetzt im Nachhinein zu versuchen den kaputten Wert wieder zu richten.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich hab' das object zu spaet gesehen. Laut https://www.tensorflow.org/api_docs/pyt ... g_to_array . Ich denke mal da wird danach noch irgendwie gefummelt.
Meinnamegehtdichga
User
Beiträge: 13
Registriert: Donnerstag 8. August 2019, 16:23

Hallo, der Code ist folgender:

X = numpy.array(float)
y = numpy.array(float)
path_parrot = os.listdir("picturesready\\parrot")
len_path_parrot = len(path_parrot)
i = 0
while i < len_path_parrot:
img = load_img("picturesready\\parrot\\" + path_parrot)
Z = img_to_array(img, dtype = float)
Z.flatten("F")
Z.astype(float)
X = numpy.append(X, Z)
y = numpy.append(y, 1)
i = i + 1
X = X.astype(float)

Danke für die Hilfe.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Meinnamegehtdichga: was hilft es, wenn Du hier nochmal den selben Code postest, auf den Du in Deinem anderen Thread schon eine Antwort bekommen hast?

Ach, hier ist auch der Grund gepostet, wie Du X mit einem Objekt-Array, das den Typ float als Element enthält, initialisierst.
Meinnamegehtdichga
User
Beiträge: 13
Registriert: Donnerstag 8. August 2019, 16:23

Genau, das kam mir beim posten auch schon falsch vor. Was wäre denn dann anders zu machen? Ich habe den Code so gepostet, weil sich da kaum was geändert hat.Es gibt nichts relevantes mehr.
Benutzeravatar
__blackjack__
User
Beiträge: 13110
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Meinnamegehtdichga: Wie man es besser macht wurde doch bereits im anderen Thema gesagt – nicht mit einem leeren Array anfangen (wollen) sondern die Arrays der Bilder in einer Liste sammeln und dann am Ende ein grosses Array daraus machen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten