【问题标题】:Save a Matlab Property to a mat file将 Matlab 属性保存到 mat 文件
【发布时间】:2017-04-12 01:13:02
【问题描述】:

我有一个带有struct 属性的类,名为myStruct

properties
   myStruct;
end

我想将结构保存到.mat 文件中。我试过了:

save -append registers.mat myStruct;

但它给出了错误:

Variable 'myStruct' not found.

我有不同的函数来更新struct,比如:

    function configureChannel( obj, Channel )
       myStruct.Channel = Channel;
       save -append registers.mat myStruct;
    end  

    function updateConfiguration( obj, dataPath )
       myStruct.EN = 1;
       save -append registers.mat myStruct;
    end  

这些都是同一个类的函数。

【问题讨论】:

  • 你必须在你的类属性前面加上类名。
  • 你的意思是这样? save -append registers.mat myClass.myStruct 不起作用。
  • 试试save -append registers.mat obj.myStruct;。如果它不起作用 - 将其放入临时变量中,然后保存变量 (a = obj.myStruct; save ...)。另外,我很确定您在执行myStruct.Channel = Channel; 时正在创建一个新的局部变量,您应该改为使用obj.myStruct.Channel = Channel;
  • @Dev-iL ...为什么不把它放在答案中? :)
  • @Dev-iL 同样,奇怪的是 MATLAB 然后不保存临时... OP 必须在没有这种临时的方法中调用 save

标签: matlab oop serialization save mat-file


【解决方案1】:

我认为这段代码的主要问题是你如何从你的函数中访问myStruct。看看下面这段代码:

function configureChannel( obj, Channel )
  myStruct.Channel = Channel;
  ...
end

打算为它做的是将Channel 分配到当前对象的myStructChannel 属性的Channel 字段中。它实际上所做的相当于调用:

myStruct = struct('Channel', Channel);

也就是说,您在configureChannel 的当前工作空间/范围内创建一个新的局部变量实际上并未更新对象的属性obj

所以你需要做的第一个更正是你如何在你的setter 中访问myStruct

obj.myStruct.Channel = Channel;

接下来是保存的问题。

当将对象字段的副本转储到文件中时,我希望 save 将您的任意对象视为 struct,因此 struct saving conventions 应该适用:

'-struct',structName |将structName 指定的标量结构的字段作为单个变量存储在文件中。例如,save('filename.mat','-struct','S') 保存标量结构 S

因此,我希望以下内容可以工作免责声明:我没有测试它

save('filename.mat','-struct','obj.myStruct');

万一上述失败的其他选择:

save('filename.mat','obj.myStruct');            % Alternative #1
tmp = obj.myStruct; save('filename.mat','tmp'); % Alternative #2

最后一件事——您可能已经注意到,我使用save 的函数形式,因为我认为它更易于维护/可读/防傻:

save(filename,variables,'-append');

【讨论】:

    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2016-03-07
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多