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
<class 'float'> in array
- __blackjack__
- User
- Beiträge: 13925
- 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.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
- __blackjack__
- User
- Beiträge: 13925
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Also mal wie man diesen Unsinn nachstellen kann:
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.
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)
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
-
- 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?
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?
- __blackjack__
- User
- Beiträge: 13925
- 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?
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.
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'
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
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.
-
- 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.
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.
@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.
Ach, hier ist auch der Grund gepostet, wie Du X mit einem Objekt-Array, das den Typ float als Element enthält, initialisierst.
-
- 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.
- __blackjack__
- User
- Beiträge: 13925
- 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.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware