3

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; 

引发错误。

任何帮助,将不胜感激。我知道我可以用循环来做到这一点,但我正试图以最快和最有效的方式做到这一点。

4

1 回答 1

5

简单但不直观

y=[x.Value]

为什么?Wellx.Value不是连续的内存块,所以不能直接分配给数组。调用依次x.Value从每个对象返回 Value 数据成员。xMatlab 将其视为单独的操作。通过将调用包含在[]您告诉 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]
于 2013-02-20T18:04:37.780 回答