Matlab中的逻辑屏蔽-如何(立即)索引级联的Matlab数组?

时间:2019-06-13 13:13:45

标签: matlab indexing struct concatenation mask

数据结构:

我有一个结构数组s,其中有几个字段s.xs.ys.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)

因此,基本上,我感兴趣的是一种瞬时方法来连接结构并对其应用蒙版。

谢谢!

1 个答案:

答案 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)