2017-04-02 2 views
0

Ich habe eine Variable namens Quellen, die acht Zahlen enthalten:Verhindern Sie, dass MatLab Verschachtelungsvariablen beim Speichern/Laden?

sources = 

    0.6028 
    0.7112 
    0.2217 
    0.1174 
    0.2967 
    0.3188 
    0.4242 
    0.5079 

ich es save('sources.mat', 'sources'); mit speichern und dann wieder laden sources = load('sources.mat');

Verwendung jedoch nicht mehr nur ein Array von acht Zahlen, die Quellen Variable ist jetzt:

sources = 

    sources: [8x1 double] 

Gibt es eine Möglichkeit, diese Verschachtelung beim Speichern/Laden loszuwerden? Es ist mühsam, die verschachtelten Variablen immer nach dem Laden zu finden. Als ich sources = load('sources.mat'); verwenden würde Ich mag zurück

sources = 

    0.6028 
    0.7112 
    0.2217 
    0.1174 
    0.2967 
    0.3188 
    0.4242 
    0.5079 

dies getan werden kann, bekommen?

Antwort

1

im einfachsten Fall als die, die Sie uns zeigen, können Sie eine Inline-Funktion erstellen, die Ihre Daten extrahiert:

loadAndExtract = @(varname) arrayfun(@(x) x.(varname), load(varname)); 

jetzt können Sie nur Ihre Daten als Matrix laden:

sources = loadAndExtract('sources.mat'); % load and extract data 

Der Nachteil dieses Ansatzes besteht darin, dass Sie gezwungen sind, den Namen der Datei und den Namen der Variablen anzugeben. Wenn dies ein Problem für Sie ist, können Sie die Funktion leicht machen komplexer:

loadAndExtract = @(dataName,varname) arrayfun(@(x) x.(varname), load(dataName)); 

jetzt, wenn Sie Ihre Daten mit einem bestimmten Namen laden:

save('mySources','sources'); 

Sie es immer noch durch die Angabe des Namens laden der Variablen und des Namens der Datei.

sources = loadAndExtract('mySources','sources'); 

Grundsätzlich können Sie die Funktion schreiben, um mehrere Daten aus der gleichen Datei zu extrahieren, aber dann ist die Inline-Funktion wird immer komplexer und ich würde vorschlagen, ist als eine separate Funktion zu schreiben.

+1

Ich mag Inline-Funktionen für diese kleinen Probleme verwenden, weil sie die Portabilität des Codes und die allgemeine Lesbarkeit erhöhen (kombiniert mit einer externen Funktion, oder die gleiche Operation immer wieder auf dem gleichen Skript zu wiederholen). Aber ich weiß, dass nicht alle mit mir übereinstimmen. –

Verwandte Themen