【问题标题】:Matlab OOP accessing properties from an object arrayMatlab OOP 从对象数组中访问属性
【发布时间】:2013-02-05 20:08:51
【问题描述】:

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; 

引发错误。

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

【问题讨论】:

    标签: arrays oop matlab matrix


    【解决方案1】:

    简单但不直观

    y=[x.Value]
    

    为什么? x.Value 不是连续的内存块,所以不能直接分配给数组。调用x.Value 依次从每个x 对象返回值数据成员。 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]
    

    【讨论】:

    • Aka x 包含数组,但它们的长度不相等。
    • 查看我的编辑了解详情。 x 包含 sample 类的数组。非严格类型的乐趣!
    • 感谢修复它的人我以垂直格式而不是水平存储我的数组,当我索引它们时并不重要,但在梳理它们时它确实如此,所以我切换它们并现在工作。 ...哎呀。
    猜你喜欢
    • 2017-05-11
    • 2015-08-03
    • 1970-01-01
    • 2016-10-28
    • 2018-05-21
    • 2018-11-12
    • 2020-05-04
    • 2011-06-12
    相关资源
    最近更新 更多