matlab 中rows,在Matlab结构中过滤’rows’

结构分别存储它们的字段,因此您必须将过滤器应用于每个字段.

例如,请考虑以下结构

%# a sample structure

dataFile.a_field = randn(20,1) + 1;

dataFile.b_field = num2str((1:20)','string %d'); %'

dataFile.c_field = rand(20,1);

%# find rows where 'a_field' is bigger than 2

idx = dataFile.a_field > 2;

现在,您有两个选项可以过滤其他字段:

1)structfun

使用STRUCTFUN在每个字段上应用过滤功能:

data2 = structfun(@(x) x(idx), dataFile, 'UniformOutput',false);

2)FOR循环动态字段名称

写一个显式的for循环,并使用dynamic field names访问每个:

fn = fieldnames(dataFile);

for i=1:numel(fn)

data2.(fn{i}) = dataFile.(fn{i})(idx);

end

3)cellarrays

%# cellarray

C = struct2cell(dataFile);

C = [num2cell(C{1}) cellstr(C{2}) num2cell(C{3})];

%# filter rows from all columns

idx = vertcat(C{:,1}) > 2;

C_filtered = C(idx,:)

在这种情况下的结果:

>> C_filtered

C_filtered =

[3.0034] ' string 5' [ 0.53406]

[2.4158] 'string 11' [ 0.18971]

[2.0289] 'string 13' [ 0.14761]

[ 2.458] 'string 14' [0.054974]

[2.7463] 'string 16' [ 0.56056]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值