2017-06-14 3 views
1

Ich habe ein paar Listen, die ich in eine *.mat file speichern möchte. Aber nach scipy.io.savemat Befehl Dokumentation Ich muss ein Wörterbuch mit den Listen erstellen und dann den Befehl verwenden, um es in eine *.mat file zu speichern.Erstellen von * .mat-Datei aus Python ohne Verwendung von Wörterbuch

Wenn ich es gemäß der in den Dokumenten erwähnten Weise speichere, hat die Mat-Datei eine Struktur mit Variablen wie die Arrays, die ich im Wörterbuch verwendet habe. Jetzt habe ich ein Problem hier, Ich habe ein anderes Programm (das nicht editierbar ist) wird die Mat-Dateien verwenden und sie laden, um einige Diagramme aus den Daten zu plotten. Das Programm kann die Struktur nicht verarbeiten, weil es so geschrieben ist, dass es, wenn es eine Mat-Datei lädt, die Arrays direkt verarbeitet.

Gibt es eine Möglichkeit, die mat file ohne dictionaries zu speichern? Bitte beachten Sie das Bild für mehr Verständnis *.mat file with struct

*.mat file without struct

Dank

Dies ist die Probe-Algorithmus i verwendet, um meine *.mat file

import os 
os.getcwd() 
os.chdir(os.getcwd()) 
import scipy.io as sio 

x=[1,2,3,4,5] 
y=[234,5445,778] #can be 1000 lists 

data={} 

data['x']=x 
data['y']=y 
sio.savemat('test.mat',{'interpolated_data':data}) 
+0

du nicht einfach ein Wörterbuch brauchen Sie verwenden, in denen Schlüssel entspricht (die in MATLAB geladen Namen nach wird) mit in diesem nicht editierbare Programm erwartet Namen? –

+0

@ ŁukaszRogalski Ich habe nicht verstanden, was Sie genau meinen. Können Sie es ein wenig mehr erklären? – ayaan

+0

können Sie ein Beispiel für den Code hinzufügen, der 'scipy.io.savemat' aufruft? es scheint, als ob Sie diese Funktion missbrauchen ... – Shai

Antwort

2

Wie wäre es

scipy.io.savemat('interpolated_data_max_compare.mat', 
       {'NA1_X_order10_ACCE_ms2': np.zeros((3000,1)), 
        'NA1_X_order10_DISP_mm': np.ones((3000,1))}) 

Sollte zu sparen Arbeitsflosse e ...

Nach dem Code, den Sie in Ihrer Frage hinzugefügt, statt sio.savemat('...', {'interpolated_data':data}), speichern nur

sio.savemat('...', data) 

und Sie sollten in Ordnung sein: data ist bereits ein Wörterbuch brauchen Sie nicht ein hinzufügen Extra Level mit {'interpolated_data': data} beim Speichern.

+0

hinzugefügt Wenn ich viele Listen habe, wie Sie würden Sie mir vorschlagen, den Befehl zu schreiben? – ayaan

+0

@ayaan sehe meine Bearbeitung. – Shai

+0

Ich werde mein Ergebnis in wenigen Minuten aktualisieren – ayaan

1

Sie könnten die Schreib Primitiven

direkt
import scipy.io.matlab as ml 

f=open("something.mat","wb") 
mw=ml.mio5.MatFile5Writer(f) 
mw.put_variables({"testVar":22}) 
+0

sollte nicht 'f' offen sein für schreiben (und binär?). was ist 's'? sollte es "f" sein? – Shai

+0

können Sie einen Link hinzufügen eine Dokumentation von 'ml.mio5'? ist es möglich, es ist einfach das Backend von 'scipy.io.savemat'? – Shai

+0

Ja und ja, es ist das Backend, 'scipy.io.matlab.mio5', auf das am Ende der' savemat' Hilfe verwiesen wird. – xvan

Verwandte Themen