Seite 1 von 1
Numpy array in einem for-loop befüllen
Verfasst: Montag 27. April 2020, 08:59
von naheliegend
Hi,
eigentlich dachte ich, dass es ganz einfach sein werde. Möchte jedes Bild standardisieren indem ich einfach durch iteriere und mir jeden 2D Array, also 28x28 scale.
Code: Alles auswählen
import numpy as np
from sklearn import preprocessing
data = data.reshape(-1, 1, 28, 28)
for i in range(len(data)):
scaler = preprocessing.StandardScaler().fit(data[i,0])
data_stdized[i,0] = scaler.transform(data[i,0])
return data_stdized
Bekomme aber den Error:
Code: Alles auswählen
data_stdized[i,0] = scaler.transform(data[i,0])
NameError: name 'data_stdized' is not defined
Woran liegt es?
Re: Numpy array in einem for-loop befüllen
Verfasst: Montag 27. April 2020, 09:07
von __blackjack__
@naheliegend: Das liegt daran das `data_stdized` nicht definiert ist. Was soll das denn sein und wo denkst Du das das auf magische Weise her kommt?
Re: Numpy array in einem for-loop befüllen
Verfasst: Montag 27. April 2020, 09:38
von naheliegend
Es gibt Programmiersprachen, da wird der Speicher für ein neuen Array direkt mitallokiert bzw die Variable initialisiert, oder? Denke da an Matlab gerade.
Was ist denn nun der schnellste und einfachste Weg Matrizen in einem array zu speichern?
also data_stdized hat eine shape von (60000,1,28,28), wobei die 60000 variable ist.
Re: Numpy array in einem for-loop befüllen
Verfasst: Montag 27. April 2020, 09:47
von einfachTobi
Iteriere nicht über ein Array. Das ist fast immer der falsche Ansatz. Zur Entstehung der Fehlermeldung hat __blackjack__ ja schon was gesagt. Hier kannst du auch fit_transform() verwenden, um die Schritte gleichzeitig durchzuführen - im gesamtem Array.
Re: Numpy array in einem for-loop befüllen
Verfasst: Montag 27. April 2020, 09:49
von __blackjack__
@naheliegend: Python als Sprache hat keine Arrays. Woher sollte Python denn wissen welchen Datentyp `data_stdized` überhaupt haben soll wenn man das nicht explizit irgendwo sagt?
Und selbst wenn es nur Arrays gäbe, woher sollte eine Programmiersprache bei der Zuweisung wissen welche Dimensionen das automagisch nur durch eine Zuweisung erzeugte Array haben soll? Geht das tatsächlich so in Matlab? Dann müssen die Arrays dort aber dynamisch bei Zuweisungen die Grösse ändern können. Was Numpy-Arrays nicht tun.
Re: Numpy array in einem for-loop befüllen
Verfasst: Montag 27. April 2020, 10:04
von naheliegend
Danke für eure schnellen Antworten. Das freut mich und hat mich noch stärker zum googeln angeregt. All in all bin ich aber keinen Schritt weiter.
data hat ja die shape (X,1,28,28). Jetzt möchte ich aber jedes Bild, welches die Größe 28x28 hat, standardisieren.
fit_transform(self, X[, y]) erwartet offensichtlich eine 2D Matrix. Da komme ich wohl um eine Iteration nicht herum oder?
Re: Numpy array in einem for-loop befüllen
Verfasst: Montag 27. April 2020, 10:31
von naheliegend
Kann es sein, dass es nicht so clever ist Bilder in der Form (X,1,28,28) zu speichern bzgl preprocessing?
datasets.load_digits() z.b. speichert alle Bildmatrizen nebeneinander und untereinander in einer großen 2D Matrix. Ist das nicht clever, weil die Bildgröße kennt man ja und kann sie dementsprechend am Ende zum trainieren eines CNNs wieder auseinanderdröseln.
Re: Numpy array in einem for-loop befüllen
Verfasst: Montag 27. April 2020, 17:39
von ThomasL
Die Bilddaten des MNIST oder Fashion-MNIST Datensatzes haben den Wertebereich 0...255, um die Bilder in ein CNN einzuspeisen reicht
eine einfache Division durch 255 für eine Normalisierung des gesamten Datensatzes aus, wenn die Daten als numpy ndarray vorliegen.
Dadurch hast du auch gleichzeitig eine Konvertierung des Datentyps von uint8 nach float.