Matlab:如何使用逻辑选择器筛选cell数组中的指定元素?
解决MATLAB Cell数组元素筛选问题
核心问题说明
你尝试用T([1 0 1])失败,是因为MATLAB中数值索引不允许0值,而布尔索引需要明确是logical类型的数组,不是普通的double类型0/1。
方法1:将现有数值索引转为逻辑类型
你已经通过strfind得到了数值索引数组indexlistM = [1 0 1],只需要把它转换成logical类型即可用于筛选:
indexlistM = cell2mat(strfind(T, 'A')); filtered_T = T(logical(indexlistM));
运行后filtered_T就是包含两个'A'的cell数组。
方法2:直接生成布尔筛选条件(更简洁)
跳过strfind,直接用cellfun结合strcmp生成精准的布尔索引,避免类型问题:
% 生成布尔数组:元素为'A'时返回true,否则false bool_idx = cellfun(@(x) strcmp(x, 'A'), T); filtered_T = T(bool_idx);
这种方法更直观,也不需要额外处理索引类型转换。
补充验证(单个字符场景专用)
如果你的cell数组元素都是单个字符,还可以用更简单的方式:把cell数组转为字符数组后筛选,再转回cell:
char_T = char(T); filtered_char = char_T(char_T == 'A'); filtered_T = cellstr(filtered_char);
内容的提问来源于stack exchange,提问作者Matthias Pospiech
相关产品推荐
相关产品推荐

