Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Matlab去除空结构域_Matlab_Structure_Field - Fatal编程技术网

用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) = [];