在Matlab中,我有S一些带有一些字段的标量结构.每个字段都包含一个数字向量,并且所有这些向量都具有相同的大小nx1.
现在我想根据选择的字段创建一个数字矩阵.
起点是一个大小合理的逻辑掩码mx1,其中m是字段数S.mask(i)是true如果的第i个场S应被包括在基体中.所以矩阵大小就是n x sum(mask).
示例(在我的代码中,结构不是以这种方式构建的,当然:-)
vec = rand(1000,1);
S.f1 = vec;
S.f2 = vec;
S.f3 = vec;
S.f4 = vec;
S.f5 = vec;
mask = [false true true false false]; % 5 elements because S has 5 fields
Run Code Online (Sandbox Code Playgroud)
预期的产出是:
output = [S.f2 S.f3];
Run Code Online (Sandbox Code Playgroud)
但是,当然,创建output应该依赖于字段S和动态mask.
有没有办法实现这一点,而不使用丑陋的结构,包括结构字段名称,循环等的过滤器?
非常感谢你!
菲利普
这是一种方式 -
fns = fieldnames(S) %// Get all fieldnames
S = rmfield(S,fns(~mask)) %// Remove all fields with masking values as false
Run Code Online (Sandbox Code Playgroud)
接下来,要获取数字数组,请使用struct2array-
output = struct2array(S)
Run Code Online (Sandbox Code Playgroud)