2012-02-01 30 views
7

Giả sử tôi có tệp .mat với một số phiên bản của cùng một cấu trúc, mỗi biến trong một tên biến khác nhau.tải biến từ tệp .mat vào một biến có tên khác là

Tôi muốn xử lý từng trường hợp được tìm thấy trong một tệp (mà tôi tìm thấy bằng cách sử dụng whos('-file' ...). Tôi đã hy vọng rằng load sẽ cho phép tôi chỉ định tên đích cho một biến để tôi không phải lo lắng về va chạm (và vì vậy mà tôi không phải viết mã tự sửa đổi a la eval).

Lực lượng cách vũ phu để làm điều này dường như được tạo ra một hàm helper đó, sử dụng các biến với những cái tên mà hy vọng không mâu thuẫn với các nội dung .mat, làm điều gì đó như:

  1. Liệu một whos trên tệp để lấy các tên được chứa.
  2. Tải lại từng cấu trúc có chứa một cách tự nhiên.
  3. Sử dụng eval để gán cấu trúc được nạp vào, ví dụ: một mảng ô (trong đó một cột của mảng chứa tên cấu trúc của tệp .mat và cột tương ứng với nội dung thực tế của mỗi cấu trúc từ tệp .mat).

Không còn cách nào thanh lịch hơn để hoàn thành điều tương tự?

Trả lời

8

Tất nhiên bạn có thể! Chỉ cần sử dụng load với đối số đầu ra.

x = 1; 
save foo; 

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

tốt đẹp. Tôi liên tục nhìn vào trang hướng dẫn 'load' tự hỏi" giá trị trả về của "mảng cấu trúc" là gì? " Bây giờ tôi biết! – jhfrontz

4

bạn có thể load dữ liệu trong một file MAT thành một cấu trúc

ws = load('matlab.mat'); 

các lĩnh vực cơ cấu ws sẽ là các biến trong file MAT. Sau đó bạn có thể thậm chí có một mảng di động của cấu trúc

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

Ví dụ

>> 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 
Các vấn đề liên quan