Seite 1 von 1

<class 'float'> in array

Verfasst: Donnerstag 8. August 2019, 16:31
von Meinnamegehtdichga
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

Re: <class 'float'> in array

Verfasst: Donnerstag 8. August 2019, 16:39
von __deets__
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.

Re: <class 'float'> in array

Verfasst: Donnerstag 8. August 2019, 17:00
von __blackjack__
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.

Re: <class 'float'> in array

Verfasst: Donnerstag 8. August 2019, 17:03
von __blackjack__
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.

Re: <class 'float'> in array

Verfasst: Donnerstag 8. August 2019, 17:05
von Meinnamegehtdichga
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?

Re: <class 'float'> in array

Verfasst: Donnerstag 8. August 2019, 17:08
von __blackjack__
@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.

Re: <class 'float'> in array

Verfasst: Donnerstag 8. August 2019, 17:13
von __deets__
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.

Re: <class 'float'> in array

Verfasst: Freitag 9. August 2019, 20:25
von Meinnamegehtdichga
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.

Re: <class 'float'> in array

Verfasst: Freitag 9. August 2019, 20:31
von Sirius3
@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.

Re: <class 'float'> in array

Verfasst: Freitag 9. August 2019, 20:38
von Meinnamegehtdichga
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.

Re: <class 'float'> in array

Verfasst: Freitag 9. August 2019, 20:56
von __blackjack__
@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.