从标量结构的字段动态创建数值矩阵

use*_*990 2 matlab structure

在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.

有没有办法实现这一点,而不使用丑陋的结构,包括结构字段名称,循环等的过滤器?

非常感谢你!

菲利普

Div*_*kar 5

这是一种方式 -

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)

  • 这是一个很好的干净方式=) (2认同)