将类转换为结构并存储在.mat文件中-MATLAB

时间:2018-07-24 06:38:33

标签: matlab mat mat-file matlab-struct matlab-class

我有一个类,该类具有一些属性,它们是其他类的对象,当我将该类转换为结构并检查数据时,所有属性的全部信息都会存在。但是将其存储到.mat文件后,当我加载数据时,作为其他类实例的属性将消失!为此,数据字段为空。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

为此,Matlab建议使用Object Save and Load Process。这要求为每个类定义两个方法,这些方法将数据存储为结构,然后将其重新转换为类类型。

Mathworks documentation展示了一个基本saveObj和loadObj模式的示例,该模式将结果存储在.mat文件中,然后重新加载数据。

您需要为每个要为其保存属性的类执行此操作。


供参考:

classdef GraphExpression
   properties
      FuncHandle
      Range
   end
   methods
      function obj = GraphExpression(fh,rg)
         obj.FuncHandle = fh;
         obj.Range = rg;
         makeGraph(obj)
      end
      function makeGraph(obj)
         rg = obj.Range;
         x = min(rg):max(rg);
         data = obj.FuncHandle(x);
         plot(data)
      end
   end
   methods (Static)
      function obj = loadobj(s)
         if isstruct(s)
            fh = s.FuncHandle;
            rg = s.Range;
            obj = GraphExpression(fh,rg);
         else
            makeGraph(s);
            obj = s;
         end
      end
   end
end

这可以用作:

>>> h = GraphExpression(@(x)x.^4,[1:25])
>>> h = 
>>>
>>>  GraphExpression with properties:
>>>
>>>    FuncHandle: @(x)x.^4
>>>         Range: [1x25 double]

然后存储并重新加载:

>>> save myFile h
>>> close
>>> load myFile h