gpt4 book ai didi

Matlab:有关句柄变量和 mat 文件的文档?

转载 作者:行者123 更新时间:2023-12-02 01:07:12 25 4
gpt4 key购买 nike

是否有关于保存和加载 mat 文件时如何处理句柄变量的 TMW 文档?通过反复试验,我确定了基本行为,例如,底层对象存储到 mat 文件中,并从 mat 文件加载,但实际的类定义本身不是。也就是说,如果您加载了一个句柄对象,但是您的类定义已通过添加字段进行了修改,则加载的对象将具有这些附加字段,尽管它们不会使用值进行初始化。

对于那些在面向对象编程中定义句柄类的人来说,更全面的设计行为文档是必不可少的。例如,如果将对象 A 保存到 mat 文件,并且它具有引用对象 Z 的属性,然后将对象 B 保存到 mat 文件,并且它也包含引用对象 Z 的属性,该怎么办?如果我加载两个 mat 文件中的每一个,我是否会有对象 Z 的两个单独实例,或者这两个变量是否引用同一个对象?

另一种情况可能是两个句柄对象变量引用同一个对象,但一个变量位于基础工作区中,另一个变量实际上是另一个对象的属性?如果我保存并加载,这两个变量是否仍然指向同一个对象?

我知道我可以凭经验对每种可能的场景进行逆向工程,但这比阅读行为规范(如果存在)效率低得多。

最佳答案

Matlab 句柄对象只要位于内存中,就会通过引用传递。但是,当保存并重新加载它们时,它们是一个新对象,因此,对它们的任何引用和来自它们的引用都会“损坏”(请参见下面的示例)。对于类句柄的所有对象都是如此,无论您构造的情况有多复杂(例如 objectAobjectB 的属性,而 objectA 又是 parfor 的属性,在重新加载后会突然占用更多内存):从磁盘创建一个新的、未引用的实例。

objA = myHandleObject();
objB = objA; %# same object, changing A changes B
save('objOnDisk.mat','objB');
load('objOnDisk.mat') %# overwrites objB in the workspace
%# objB is no longer a reference of objA

如果您修改句柄对象,例如当工作空间被保存并重新加载到各个工作人员时,集群上的 loadobj 循环。

有一种解决方法:您可以定义 tempname 函数来查找同一类的其他对象,如果为每个对象添加唯一的引用编号(例如,将属性设置为 ojit_code ),您可以“手动重建”引用文献。去过那里,做过,但不能推荐,因为它很快就会变得非常复杂。

关于Matlab:有关句柄变量和 mat 文件的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36025747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com