用Matlab去除空结构域
我面临以下问题:我有一系列结构,如:用Matlab去除空结构域,matlab,structure,field,Matlab,Structure,Field,我面临以下问题:我有一系列结构,如: A.B(1,1).x = 'string' A.B(1,1).y = 12 A.B(1,2).x = [] A.B(1,2).y = [] A.B(1,3).x = 'string2' A.B(1,3).y = 4 我想删除空的2。从这个结构中提取行,这样最后我得到了(1,1)和(1,3)的字段。 我试图转换为单元格,删除,然后返回到结构,但这样我必须重新键入字段名。 怎么可能做到呢?不从结构转换就可以完成吗 蒂亚 使用循环或来确定哪些数组元素为空: em
A.B(1,1).x = 'string'
A.B(1,1).y = 12
A.B(1,2).x = []
A.B(1,2).y = []
A.B(1,3).x = 'string2'
A.B(1,3).y = 4
我想删除空的2。从这个结构中提取行,这样最后我得到了(1,1)和(1,3)的字段。
我试图转换为单元格,删除,然后返回到结构,但这样我必须重新键入字段名。
怎么可能做到呢?不从结构转换就可以完成吗
蒂亚 使用循环或来确定哪些数组元素为空:
empty_elems = arrayfun(@(s) isempty(s.x) & isempty(s.y),A.B)
返回:[0 1 0]
或
检查所有字段是否为空(使用而不是检查是否有任何元素为空而不是全部)
然后使用以下方法将其移除:
在评论中完整解决您的问题:
% find array elements that have all fields empty:
empty_elems = arrayfun(@(s) all(structfun(@isempty,s)), A.B);
% copy non-empty elements to a new array `C`:
C = A.B(~empty_elems);
% find elements of C that have y field >3
gt3_elems = arrayfun(@(s) s.y<3,C);
% delete those form C:
C(gt3_elems) = [];
%查找所有字段均为空的数组元素:
empty_elems=arrayfun(@(s)all(structfun(@isempty,s)),A.B);
%将非空元素复制到新数组“C”:
C=A.B(~空元素);
%查找y字段大于3的C元素
gt3_elems=arrayfun(@(s)s.y如果我有更多的字段,比如x,y,z等,有没有一种有效的方法来写这个条件?因为只有一个条件是空的(s.x),它不会删除空字段。可能是适用的……实际上我在想以下几点,首先我有一个带数据的A.B整体。然后我为A.B应用一个条件。().y>3,如果是这样,保存在一个新的结构中,从中我得到了这个空的a.B.(1,2)(假设a.B.(1,2).y=2)。是否有更好的方法可以立即避免结构中的空字段?问题是,将数字与空字段进行比较会产生空结果。我建议先过滤掉空字段,然后应用您的条件。我不确定是否理解得很好,但如果理解得很好,那么..空字段就是应用我的条件的结果。请注意因为所有字段都有值,并且由于事实2
A.B(empty_elems) = [];
% find array elements that have all fields empty:
empty_elems = arrayfun(@(s) all(structfun(@isempty,s)), A.B);
% copy non-empty elements to a new array `C`:
C = A.B(~empty_elems);
% find elements of C that have y field >3
gt3_elems = arrayfun(@(s) s.y<3,C);
% delete those form C:
C(gt3_elems) = [];