如何在Matlab R2020b中彻底删除元胞数组的<missing>值?
解决Matlab元胞数组删除missing值的问题
问题分析
你之前的代码仅将包含missing的元胞内容替换为空数组,但未删除整个元胞元素,因此数组长度仍保持6,只是最后两个元胞变为空的0×0 double数组。要彻底清除缺失值,需要直接筛选保留非缺失值的元胞。
解决方案
方法1:直接用逻辑索引筛选(一行代码)
my_array = my_array(~cellfun(@ismissing, my_array));
cellfun(@ismissing, my_array):遍历元胞数组的每个元素,返回与原数组同维度的逻辑数组,对应missing的位置为true~:对逻辑数组取反,得到需要保留的元素索引(非missing的位置为true)- 通过索引筛选原数组,直接得到4×1的目标元胞数组
方法2:修改cleanup函数
将你的函数修改为直接删除对应元胞元素:
function array = cleanup(array) % 生成保留元素的逻辑索引 keep_indices = ~cellfun(@ismissing, array); % 筛选并重新赋值数组 array = array(keep_indices); end
调用该函数后,my_array会直接变为4×1的元胞数组,仅保留非缺失值的元素。
验证效果
执行上述代码后,输出结果为:
my_array = 4×1 cell array {'a'} {'b'} {'c'} {'d'}
内容的提问来源于stack exchange,提问作者AmericanJael
相关产品推荐
相关产品推荐

