Wie konvertiere ich ein 3d Array in ein 2d Array?

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

Entschuldigt, dass ich noch einmal frage, aber ich habe leider im Internet nichts hilfreiches zu den Thema gefunden. Ich habe ein 3d Array, mit den shape: (19680, 32, 3)
Da ich es als 3d Array nicht nutzen kann, wollte ich fragen, wie ich dieses array in ein 2d array umwandeln kann.
Dieses Array ist folgendermassen entstanden:
/code
while i < len_path_penguins:
img = load_img("picturesready\\penguin\\" + path_penguins)
Z = img_to_array(img, dtype = int)
print(Z.shape, "w")
Z.astype(int)
if i == 0:
X = Z
y = numpy.append(y, 0)
i = i + 1
print(X.shape)
X = numpy.concatenate((X,Z), axis = 0)
i = i + 1
/code
Dieses Array sieht dann so aus:
[[[ 36 86 113]
[ 41 82 112]
[ 47 69 108]
...
[254 255 251]
[249 255 255]
[244 254 255]]]

Wisst ihr, wie man das machen könnte?
Danke
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

Wieso nimmst Du nicht einfach das, was ich Dir in DIESEM Thread hier gezeigt habe?
Meinnamegehtdichga
User
Beiträge: 13
Registriert: Donnerstag 8. August 2019, 16:23

Ich habe ein bisschen herumprobiert, und wollte das nicht 1 zu 1 übernehmen, weil ich es ein wenig verstehen wollte. Es funktioniert ja genauso. Der Output ist doch der selbe. Aber in beiden Fällen kommt doch ein 3d Array aus?
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@Meinnamegehtdichga: und was hast Du daran nicht verstanden?
Es gibt nur einen Weg, die Schleife richtig auszudrücken. Versuche die Funktionsweise von for-Schleifen zu verstehen und schreibe sie dann in eigenen Worten exakt so hin.
Es gibt zwei Möglichkeiten, wie man mit Pfaden arbeitet. + gehört nicht dazu. os.path.join habe ich verwendet, die andere wäre pathlib.Path, was moderner und meiner Meinung nach besser wäre. Wenn Du also nicht 1 zu 1 übernehmen möchtest, benutze pathlib.
Dass man erst alle Bilder in einer Liste sammelt, um sie dann zu einem Array zusammenzubauen, ist auch der einzig richtige Weg. Wenn Du willst, kannst Du daraus eine List-Comprehension machen, dann ist es auch nicht 1:1 kopiert.
Aber tatsächlich sollst Du jeden Schritt verstehen, warum es so besser ist, als das was Du schreibst.

Zum eigentlichen Problem:
Bilder haben die vier Dimensionen Anzahl-Bilder x Höhe x Breite x Farbkanäle. Wie möchtest Du daraus zwei machen?

Zum Code:
Ist es Absicht, dass das erste Bild zweimal im Ergebnis vorkommt?
Meinnamegehtdichga
User
Beiträge: 13
Registriert: Donnerstag 8. August 2019, 16:23

OK, dass man kein + bei Pfaden verwendet wusste ich nicht. Ich brauche es allerdings in 2 Dimensionen für scikit learn.
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie sollen denn 2 Dimensionen daraus werden? Das musst du schon sagen. Sollen das Graustufen werden? Sollen die Farben einfach hintereinander kommen? Da gibt es keine generische Art, du musst schon genau festlegen wie.
Meinnamegehtdichga
User
Beiträge: 13
Registriert: Donnerstag 8. August 2019, 16:23

Eigentlich wäre das Ziel, soviel der daten zu erhalten. Gibt es da irgendeine Webseite die ein paar Methoden erklären?
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bestimmt. Hast du gesucht? Du willst doch irgendwas machen mit ML verfahren. Welche genau weißt doch nur du. Wie man dafür gute Trainingsdaten erstellt sollte sich dann doch rausfinden lassen.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Meinnamegehtdichga hat geschrieben: Dienstag 13. August 2019, 17:00 Eigentlich wäre das Ziel, soviel der daten zu erhalten. Gibt es da irgendeine Webseite die ein paar Methoden erklären?
Schau mal hier rein: https://www.pyimagesearch.com/free-open ... sh-course/
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten