Umformen ein array von Bildern

Habe ich 60000 train_images brachte als eine Form (28,28,60000) - matrix. Es ist ein numpy.ndarray. Ich möchte konvertieren es in ein array von 1-dimensionale Bilder, d.h. jedes Bild wird dargestellt als eine einzelne Leitung/array von zahlen, und ich möchte, 60000-arrays. In anderen Worten, ich will von (28, 28, 60000) zu (60000, 28*28). In python wäre es:

images_features = []
for image in images:
    imageLine = []
    for y in range(len(image)):
        for x in range(len(image[0])):
            imageLine.append(image[y][x])
    images_features.append(imageLine)

Wie kann ich dies tun? Ich vermute, dass ich Umformen, aber ich konnte nicht herausfinden, wie genau ich dies tun kann.

Dies ist, wie ich immer bin-Bilder:

data = scipy.io.loadmat('train.mat')


images = data["train_images"]

Also die "Bilder" ist die Reihe, die ich spreche.

Jemand mir vorgeschlagen, dass:

"Möglicherweise müssen Sie zum ändern von Achsen, oder kombinieren Sie Sie bekommen die Funktionen, die Sie wollen. Ich empfehle Ihnen aufträgt als auch im Falle eines Bildes landet seitlich. Stellen Sie sicher, dass Sie eifrig sind, mit Ihren Achsen um zukünftige Probleme zu vermeiden es."

Ich habe keine Ahnung, was "Achsen" bezeichnet wird, um hier und wie nehmen Sie, was oben gesagt Berücksichtigung.

Kann mir jemand erklären was ich tun muss und warum? (Was es tut)

  • Vielleicht images.reshape(-1).tolist() wenn Sie möchten, dass die Ausgabe in eine python Liste (oder ohne tolist() sonst)?
  • Was bedeutet die -1 zu tun? Ich brauche eine 1 von 28^2 von 60000 array.
  • Naja sorry ich misreaded. die -1 flatten vollständig die matrix (das ist nicht das, was Sie wollen). Sie können werfen Sie einen Blick auf die numpy-Dokumentation über die N-dimensional array
  • Wenn ich gut verstehe, Sie images.reshape(-1, 60000) wird die Arbeit machen ? Geben Sie 60000 verfügt mit 784 Werte. Um die Ausgabe als python-Liste von 60000 features : images.reshape(-1, 60000).T.tolist()
  • image.transpose(2,0,1) oder image.transpose(2,1,0)?
  • Du meinst NACH dem Umformen? Warum sollte das hier nötig sein? @Divakar
  • Ich meine, um zu gehen von (28, 28, 60000) zu (60000, 28*28) einer von den beiden sollte funktionieren. Und KEINE Umgestaltung notwendig.
  • Der Form nach entweder von den beiden transponiert ist noch (60000, 28, 28) , nicht (60000, 28*28), wobei für jedes Bild eine Zeile verkettet ist, an das Ende der vorherigen Zeile, wodurch eine Zeile pro Bild, 60000 Zeilen insgesamt. @Divakar
  • Also, versuchen Sie image.transpose(2,0,1).reshape(60000,-1) und image.transpose(2,1,0).reshape(60000,-1). Einer der beiden sollte funktionieren.
  • Danke, Bild.transpose(2,1,0).reshape(60000,-1) funktioniert! @Divakar
  • Alternativ, nur Bild.transpose().reshape(60000, -1), mit den Standard umsetzen.

InformationsquelleAutor ajfbiw.s | 2016-02-09
Schreibe einen Kommentar