Matlab的新手来自C / C ++ ......
我有一个对象数组,我正在尝试访问数组中每个对象的值,并将它们连接成一个变量。
Class sample
properties(GetAccess = 'public', SetAccess ='public')
ID;
Value;
end
methods
function obj = sample(id, value)
obj.ID = id;
obj.Value = value;
end
end
end
然后我制作一个包含一些对象的矩阵。
x = sample.empty(3,0);
x(1) = sample(1,3);
x(2) = sample(1,4);
x(3) = sample(1,5);
然后我想从对象中获取所有值并将它们存储到一个新数组中。
y = x(:).Value;
然而这失败了,只将x(3)的值放入y ......和:
y(:) = x(:).Value;
引发错误。
任何帮助将不胜感激。我知道我可以通过循环来做到这一点,但我正在尝试以最快和最有效的方式进行。
答案 0 :(得分:5)
简单但不直观
y=[x.Value]
为什么呢?好x.Value
不是连续的内存块,因此无法直接分配给数组。调用x.Value
依次返回每个x
对象的Value数据成员。 Matlab将此视为单独的操作。通过将调用包含在[]
中,您告诉matlab通过连接每个结果来制定连续的数组。然后可以将其分配给双精度数组y
。
编辑:
关于你的评论,如果x在不同的对象中具有不同的长度,则上述代码可以正常工作。
x(1) = sample(1,3);
x(2) = sample(1,[4 5 6]);
x(3) = sample(1,[20 10]);
然后
>> [x.Value]
ans =
3 4 5 6 20 10
如果你的意思是你想要'y'是一个参差不齐的结束向量,就像C ++中的向量向量一样,你需要使用单元格数组符号(花括号)
>> y = {x.Value}
y =
[3] [1x3 double] [1x2 double]