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

Matlab object array to table (or struct array)

正在测试 matlab2015a。我正在使用一个结构数组,在某些时候我将其转换为 table 和 struct2table。这给了一个很好的 table 列命名为结构的字段。

一段时间后,由于不相关的原因,这些结构现在是 类(或对象,不确定 matlab 中的标准命名)。 struct2table拒绝;直接应用 table(objarray) 给出一个单列 table,每行一个对象。我似乎无法找到可以做明显事情的 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 会得到:

>> 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

看了你的问题,我不确定你是否真的应该将对象转换为 table。 table有什么优势吗?

不过,您使用struct的方法基本上是正确的。我会以易于使用且不显示警告的方式包装它。

将功能包装在 class 中:

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

并在您的 class 中使用它:

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

用法:

table([a;b])