Matlab对象数组到表(或结构数组)

时间:2016-01-02 16:57:26

标签: arrays matlab object struct matlab-table

测试matlab2015a。我正在使用一个struct数组,在某些时候我转换为一个struct2table的表。这给了一个很好的表,其中的列被命名为struct的字段。

一段时间后,由于无关的原因,这些结构现在是类(或对象,不确定matlab中的标准命名)。 struct2table拒绝它;直接应用table(objarray)会给出一个单列表,每行一个对象。我似乎无法找到一个显而易见的object2table ......

我最接近的是struct2table(arrayfun(@struct, objarray)),这有点不雅,并且每个数组项都会发出警告。那么,任何更好的想法?

编辑:示例如下

>> a.x=1; a.y=2; b.x=3; b.y=4;
>> struct2table([a;b])

ans = 

x    y
_    _

1    2
3    4

这是原始和期望的行为。现在创建一个包含内容

的文件ab.m.
classdef ab; properties; x; y; end end

并执行

>> a=ab; a.x=1; a.y=2; b=ab; b.x=3; b.y=4;

试图获得没有奥术咒语的桌子会给你:

>> table([a;b])

ans = 

  Var1  
________

[1x1 ab]
[1x1 ab]

>> struct2table([a;b])
Error using struct2table (line 26)
S must be a scalar structure, or a structure array with one column
or one row.

>> object2table([a;b])
Undefined function or variable 'object2table'.

解决方法:

>> struct2table(arrayfun(@struct, [a;b]))
Warning: Calling STRUCT on an object prevents the object from hiding
its implementation details and should thus be avoided. Use DISP or
DISPLAY to see the visible public details of an object. See 'help
struct' for more information. 
Warning: Calling STRUCT on an object prevents the object from hiding
its implementation details and should thus be avoided. Use DISP or
DISPLAY to see the visible public details of an object. See 'help
struct' for more information. 

ans = 

x    y
_    _

1    2
3    4

1 个答案:

答案 0 :(得分:1)

阅读你的问题,我不确定你是否真的应该将一个对象转换为一个表。桌子有什么好处吗?

尽管如此,使用struct的方法基本上是正确的。我会以一种易于使用的方式包装它,并且不会显示警告。

在一个类中包含functionallity:

classdef tableconvertible; 
    methods
        function t=table(obj)
            w=warning('off','MATLAB:structOnObject');
            t=struct2table(arrayfun(@struct, obj));
            warning(w);
        end
    end 
end

在课堂上使用它:

classdef ab<tableconvertible; properties; x; y; end end

用法:

table([a;b])