我有一个结构数组s
,其中有几个字段s.x
,s.y
和s.z
。
请考虑该结构的以下结构属性!:
(1)同一行中的字段具有相同大小的单个矢量:
length(s(i).x)=length(s(i).y)=length(s(i).z)
(2)字段中的单个向量在各行中的大小可能有所不同:
length(s(i).x)~=length(s(j).x)
length(s(i).y)~=length(s(j).y)
length(s(i).z)~=length(s(j).z)
我想根据其中一个字段创建逻辑掩码,例如s.z
并将其应用于整个struct数组。一种方法是执行以下操作:
mask = [s.z] > 0;
s_concatenated = [s.x; s.y; s.z]';
mask_applied2struct = s_concatenated(mask);
现在我的问题是是否有一种方法可以在Matlab中将逻辑掩码应用于结构数据类型?也许是按照以下方式进行的,例如:
mask_applied2struct = s([s.z] > 0)
或
mask_applied2struct = [s]([s.z] > 0)
因此,基本上,我感兴趣的是一种瞬时方法来连接结构并对其应用蒙版。
谢谢!
答案 0 :(得分:4)
您可以使用structfun
将函数应用于结构的每个字段。 structfun
基本上是隐藏的for循环。
示例:
%random structure with size(x) = size(y) = size(z)
s.x = round(rand(4,4)*2-1);
s.y = round(rand(4,4)*2-1);
s.z = round(rand(4,4)*2-1);
%create a logical mask
mask = s.x>=0;
%apply the mask to each field
s_new = structfun(@(p) p(mask),s,'UniformOutput',0)