MatLab结构体数组如何基于字段的函数输出实现条件索引
Matlab结构体数组异构字段条件索引解决方案
错误原因分析
原有代码disp(patient([size(patient.test,1)]>3))无法生效的核心原因是:直接访问结构体数组的同名字段(patient.test)会依次返回每个元素对应字段的独立值,size函数仅能读取第一个元素的test字段尺寸,无法批量统计所有元素的test字段行数,也就无法生成符合要求的布尔索引数组。
正确实现代码
% 遍历结构体数组,生成符合条件的布尔索引 idx = arrayfun(@(x) size(x.test, 1) > 3, patient); % 使用布尔索引筛选结构体元素 filtered_patient = patient(idx); % 输出筛选结果 disp(filtered_patient);
实现逻辑说明
arrayfun是Matlab用于批量遍历数组/结构体数组的内置函数,会自动将输入数组的每个元素代入指定函数执行逻辑- 匿名函数
@(x) size(x.test, 1) > 3以单个结构体元素为输入,返回该元素test字段行数是否大于3的布尔值 - 最终返回的
idx是和原结构体数组长度一致的布尔数组,可直接作为索引筛选符合要求的结构体元素
内容的提问来源于stack exchange,提问作者PhotonCoder
相关产品推荐
相关产品推荐

