2012-02-01 17 views
7

Her biri farklı bir değişken adında, aynı yapıya sahip birkaç örneğe sahip bir .mat dosyasına sahip olduğumu varsayalım.Bir değişken .mat dosyasından farklı adlandırılmış bir değişkene yükleniyor

Dosyada bulunan her örneği (whos('-file' ... kullanarak bulduğum) işlemek istiyorum. load'un bir değişken için hedef adını belirtmeme izin vermesini umuyordum, böylece çarpışmalar hakkında endişelenmem gerekmedim (ve böylece kendi kendini değiştiren bir kod yazmak zorunda kalmamam için bir la eval).

  1. bir whos çalışır mı:

    Bunu yapmanın kaba kuvvet yolu umutla .mat içeriği ile çelişmeyen adlarıyla değişkenler kullanarak böyle bir şey yapar, bir yardımcı işlevi oluşturmak gibi görünmektedir içerilen isimleri almak için dosya.

  2. Her bir yapıyı yinelemeli olarak yükleyin.
  3. Yüklenen yapıyı (örneğin dizinin bir sütununun .mat dosyasının yapı adlarını ve her bir yapının .mat dosyasındaki gerçek içeriğine karşılık gelen bir sütunu içerdiği) bir hücre dizisine atamak için eval kullanır.

Aynı şeyi başarmanın daha şık bir yolu yok mu?

cevap

8

Elbette yapabilirsin! Sadece bir çıkış argümanı ile load kullanın.

x = 1; 
save foo; 

ls = load('foo.mat'); 
ls.x 
+0

güzel bir hücre dizisi olabilir. Tekrar tekrar "load 'manüel sayfasına" bir' yapı dizisinin 'dönüş değeri nedir? "Diye merak ederek baktım. Şimdi biliyorum! – jhfrontz

4

MAT dosyasında değişkenler olacak yapıya

ws = load('matlab.mat'); 

yapının ws alanları içine MAT dosyasındaki verileri load olabilir. Daha sonra bile yapıların

ws{1}=load('savedWorkSpace_1.mat'); 
ws{2}=load('savedWorkSpace_2.mat'); 

Örnek

>> x = 1; 
>> save ws_1; 
>> x = 2; 
>> y = 1; 
>> save ws_2 
>> clear 
>> ws{1} = load('ws_1.mat') 
>> ws{2} = load('ws_2.mat') 
>> ws{1}.x 
    x = 1 
>> ws{2}.x 
    x = 2 
İlgili konular