2011-01-17 22 views
7

đang liên quan:Matlab: tải tệp .mat, tại sao lại là cấu trúc? Tôi có thể chỉ cần lưu trữ các vars được lưu trữ vào bộ nhớ?

function result = loadStructFromFile(fileName, environmentName) 
    result = load(fileName, environmentName); 


bigMatrix = loadStructFromFile('values.mat','bigMatrix'); 

Nhưng khi tôi nhìn vào không gian làm việc, nó cho thấy 'bigMatrix' như một struct 1x1. Tuy nhiên, khi tôi nhấp vào cấu trúc, đó là dữ liệu thực tế (trong trường hợp này là ma trận 998x294).

Trả lời

7

Vì tài liệu của LOAD cho biết, nếu bạn gọi nó với đối số đầu ra, kết quả sẽ được trả về trong cấu trúc. Nếu bạn không gọi nó với một đối số đầu ra, các biến được tạo trong vùng làm việc cục bộ với tên mà chúng đã được lưu.

Đối với chức năng của bạn loadStructFromFile, nếu tên biến lưu có thể có tên gọi khác nhau (tôi giả sử environmentName), bạn có thể trả lại biến bằng cách viết

function result = loadStructFromFile(fileName, environmentName) 
    tmp = load(fileName, environmentName); 
    result = tmp.(environmentName); 
3

Ngay cả khi bạn chỉ cần chỉ định một tên biến duy nhất, LOAD sẽ vẫn xuất nó trong một cấu trúc. Trong trường hợp của bạn, một lựa chọn mà bạn có là để sử dụng chức năng STRUCT2CELL để chuyển đổi đầu ra từ LOAD thành một mảng di động, sau đó trả về kết quả này sử dụng một variable output argument list:

function varargout = loadStructFromFile(fileName,environmentName) 
    varargout = struct2cell(load(fileName,environmentName)); 
end 

Sử dụng VARARGOUT có thêm lợi ích đó, nếu environmentName khớp với nhiều biến trong tệp .MAT, bạn có thể trả lại tất cả các biến từ hàm của mình. Ví dụ, nếu tập tin .MAT bạn có ba biến N1, N2, và N3environmentNameN*, bạn có thể nhận được tất cả chúng bằng cách gọi chức năng của bạn với nhiều kết quả đầu ra:

[N1,N2,N3] = loadStructFromFile('values.mat','N*'); 
0

Nó là một bài cũ, nhưng nếu nó có thể hữu ích cho một số người:

Khi bạn tải một cấu trúc, và bạn muốn gán trực tiếp các trường con trong cơ cấu đầu ra, bạn có thể sử dụng structfun và lệnh sau:

bigMatrixOUT = structfun(@(x) x,load('values.mat','bigMatrix')) 

bigMatrixOUT sẽ chứa trực tiếp các trường của bigMatrix và không bigMatrixOUT.bigMatrix

Các vấn đề liên quan