2016-04-22 6 views
3

Ich habe einen großen Bilddatensatz. Wenn ich die Bilder verwende, habe ich mehrere Komponenten - ein gespiegeltes Bild, ein reguläres Bild, eine Eigenvektormatrix und einen Eigenwertvektor.Speichern der Liste der Numpy 2D-Arrays mit numpy.save (die Arrays sind gezackt)

würde Ich mag es zu speichern, wie:

training_sunsets_data = [cropped_training_sunsets, 
         mirrored_training_sunsets, 
         rgb_cov_eigvec_training_sunsets, 
         rgb_cov_eigval_training_sunsets] 

np.save('training_sunsets_data',training_sunsets_data) 

Und als ich dies schreibe ich es teste (weil ich sicher war, es wäre gescheitert), und das Merkwürdigste passiert ist, als ich dies tat: es hat funktioniert.

Weiter, wenn ich es wieder in den Code geladen, war es Typ Ndray, aber es ist ein gezacktes Array.


Wie ist das möglich, wenn numpy keine gezackten mehrdimensionalen Arrays erlaubt? Habe ich gerade eine Hintertür gefunden, um ein gezacktes Array in numpy zu erstellen?

+0

Können Sie das gezackte 'ndarray' hochladen, das Sie vom Laden der Datei erhalten haben? Ich bin gespannt, wie es aussieht. – gdlmx

+1

Betrachten Sie 'np.savez'. Das speichert jedes Array nach dem Namen in einer Datei und sammelt sie in einem Zip-Archiv. 'np.load' behandelt diese Art von Archiv. – hpaulj

Antwort

3

Nach der Prüfung auf meiner Maschine:

import numpy as np 
    np.save('testnp.npy', [[2,3,4],[1,2]]) 
    np.load('testnp.npy') 
    # array([[2, 3, 4], [1, 2]], dtype=object) 

Wie im Beispiel Code dargestellt ist, ist das geladene Objekt vom Typ ndarray, aber sein Datentyp ist object. Das heißt, np.save speichert ein Array von Python-Objekten, die alles Mögliche sein können. Laut der Dokumentation scheint es Python pickle zu verwenden, um diese Objekte zu packen.

Sie haben also keine Hintertür gefunden, sie verhält sich wie erwartet.

+0

... und Sie können auch Pickle verwenden, um Sätze/Sequenzen von Arrays zu speichern, wenn Sie möchten. – mdurant

+0

oh Mann. Da dachte ich, ich hätte etwas Cooles gefunden – bordeo

0

Also um zu sehen, was Sie bekommen, lässt uns etwas Code laufen.

>>> a =[np.array([[1,2,3],[4,5,6]]),np.array([[1,2],[3,4]])] 
>>> type(a) 
<type 'list'> 
>>> np.array(a) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: could not broadcast input array from shape (2,3) into shape (2) 

Wir sehen hier, dass wir durchaus in der Lage sind, eine Liste von np.arrays unterschiedlicher Abmessungen zu machen. Wir können diese Liste jedoch nicht in ein np.array umwandeln.

Ich vermute basierend auf Ihrer Syntax, dass Sie eine Liste speichern und eine Liste mit dem Typ np.array für jedes Element in der Liste zu laden.