gpt4 book ai didi

matlab - 从Matlab中一个类的所有实例中检索属性,将值写入文件

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:21 26 4
gpt4 key购买 nike

我想从我的工作区中同一类的所有实例中自动检索某些属性。

例如:我有一个 C1 类,有实例 a、b、c、d。 它们中的每一个都具有称为 x 的特定属性。我想检索所有的 x。我该怎么做?

最佳答案

这是一种可能性。假设我想在工作区中找到所有 double 。我可以做这样的事情

>> x = 12.3;
>> y = 45.6;
>> z = '789';

获取工作区中所有变量的列表

>> vars = whos();

找出哪些是 double

>> location = strcmp('double',{vars.class});

获取他们的名字

>> names = {vars(location).name};
>> names
names =
'x' 'y'

如果你现在想获得一些属性 x 的数组(假设我想获得每个 double 的余弦值)你可以这样做

>> N = length(names);
>> arr = NaN(1,N);
>> for n = 1:N
obj = eval(names{n}); # dubious use of 'eval'
arr(n) = cos(obj); # assign the relevant property to an array
end

现在你有

>> arr
arr =
0.9647 -0.0469

这是一个使用自定义对象的示例。首先,我将此代码放入文件 DProtein.m

classdef DProtein
properties
x;
y;
end
methods
function self = DProtein(x, y)
self.x = x;
self.y = y;
end
end
end

现在我创建了几个对象

>> a = DProtein(1, 'foo'); # a.x = 1
>> b = DProtein(2, 'bar'); # b.x = 2

我像以前一样在工作区中找到了正确类的所有对象

>> vars = whos();
>> location = strcmp('DProtein', {vars.class});
>> names = {vars(location).name};

现在循环收集每个对象的数组

>> for n = 1:length(names)
objects(n) = eval(names{n}); # N.B. important that 'objects' does not
# exist in the workspace before this line!
end

你可以像这样收集所有的属性

>> [objects.x]
ans =
1 2

关于matlab - 从Matlab中一个类的所有实例中检索属性,将值写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965117/

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