将自定义数据(字符串标记)附加到 MATLAB cfit 对象
Attaching custom data (string tag) to a MATLAB cfit object
我有一个代码,其中 cfit
objects are passed back and forth between functions\classes and I would like to have a "tag" 包含一些关于我的适合度的信息(即它的名称),这样我就可以在某个时候实例化它,并可以在以后需要时访问它。
理想情况下,这应该就在对象内部,这样每当我需要访问信息时,无需拖拽(或在 appdata
中)额外的 vectors\cells。
尝试与想法
通常,人们会简单地将 cfit
子类化并添加包含此数据的 属性。但是,cfit
的声明(见下文)告诉我们它是 Sealed
,因此不能被子类化。
classdef (Sealed = true) cfit < fittype
或者,我们可以尝试“劫持”一些当前对象未使用的属性并使用它来存储所需的数据(not that it's a technical problem,但这等同于忽略开发人员关于不应触及这些属性的警告。
此外,从上面的 classdef
我们还了解到这是 fittype
的子类,其中可能有一些 properties\methods 我们可以用于此目的。
最后,问题 仍然存在 - 保存我的额外数据的最佳位置是什么,这样既方便 set\get (方便意味着如果我想在循环内访问它,我不必使用eval()
),并且不会干扰cfit
对象的正常运行?
一种似乎可行的方法是访问 cfit
对象的 .p
结构并向其添加任何内容:
之前:
>> F378
F378 =
Shape-preserving (pchip) interpolant:
F378(x) = piecewise polynomial computed from p
Coefficients:
p = coefficient structure
>> F378.p
ans =
form: 'pp'
breaks: [1x40 double]
coefs: [39x4 double]
pieces: 39
order: 4
dim: 1
F378.p.tag = '3.78';
之后:
F378.p
ans =
form: 'pp'
breaks: [1x40 double]
coefs: [39x4 double]
pieces: 39
order: 4
dim: 1
tag: '3.78'
我从以下错误中发现了这一点:
Error using cfit/subsref (line 18)
The name 'probnames' is not a coefficient or a problem parameter. You can only use dot
notation to access the coefficients and problem parameters of a cfit or sfit, for example
'f.p'.
For the current object the properties you can access like this are:
p
请注意:我没有测试这个方案是否会干扰正常运行。
而不是 subclass cfit
,创建一个新的 class 并将 cfit
对象存储为 属性,以及您的标签作为另一个属性.
我有一个代码,其中 cfit
objects are passed back and forth between functions\classes and I would like to have a "tag" 包含一些关于我的适合度的信息(即它的名称),这样我就可以在某个时候实例化它,并可以在以后需要时访问它。
理想情况下,这应该就在对象内部,这样每当我需要访问信息时,无需拖拽(或在 appdata
中)额外的 vectors\cells。
尝试与想法
通常,人们会简单地将 cfit
子类化并添加包含此数据的 属性。但是,cfit
的声明(见下文)告诉我们它是 Sealed
,因此不能被子类化。
classdef (Sealed = true) cfit < fittype
或者,我们可以尝试“劫持”一些当前对象未使用的属性并使用它来存储所需的数据(not that it's a technical problem,但这等同于忽略开发人员关于不应触及这些属性的警告。
此外,从上面的 classdef
我们还了解到这是 fittype
的子类,其中可能有一些 properties\methods 我们可以用于此目的。
最后,问题 仍然存在 - 保存我的额外数据的最佳位置是什么,这样既方便 set\get (方便意味着如果我想在循环内访问它,我不必使用eval()
),并且不会干扰cfit
对象的正常运行?
一种似乎可行的方法是访问 cfit
对象的 .p
结构并向其添加任何内容:
之前:
>> F378
F378 =
Shape-preserving (pchip) interpolant:
F378(x) = piecewise polynomial computed from p
Coefficients:
p = coefficient structure
>> F378.p
ans =
form: 'pp'
breaks: [1x40 double]
coefs: [39x4 double]
pieces: 39
order: 4
dim: 1
F378.p.tag = '3.78';
之后:
F378.p
ans =
form: 'pp'
breaks: [1x40 double]
coefs: [39x4 double]
pieces: 39
order: 4
dim: 1
tag: '3.78'
我从以下错误中发现了这一点:
Error using cfit/subsref (line 18)
The name 'probnames' is not a coefficient or a problem parameter. You can only use dot
notation to access the coefficients and problem parameters of a cfit or sfit, for example
'f.p'.
For the current object the properties you can access like this are:
p
请注意:我没有测试这个方案是否会干扰正常运行。
而不是 subclass cfit
,创建一个新的 class 并将 cfit
对象存储为 属性,以及您的标签作为另一个属性.