如何合并函数ABC返回的含前置零列向量得到目标连续列向量?
解决方案:累积提取有效向量并拼接
这问题本质就是要持久化保存每次调用的有效结果,再逐步拼接。结合你的例子,我给你两种适配不同场景的MATLAB实现方案:
方法一:固定提取最后3个元素(适配你的示例规律)
从你的描述看,ABC()每次返回的向量里,有效数据都是最后3个重复值,前面补0。那直接提取最后3个元素拼接就行:
% 初始化空的累积向量,用来存最终结果 accumulated_vec = []; % 第一次调用函数并更新累积向量 current_vec = ABC(...); % 得到 [1;1;1] accumulated_vec = [accumulated_vec; current_vec(end-2:end)]; % 此时结果是 [1;1;1] % 第二次调用 current_vec = ABC(...); % 得到 [0;0;0;2;2;2] accumulated_vec = [accumulated_vec; current_vec(end-2:end)]; % 结果变为 [1;1;1;2;2;2] % 第三次调用 current_vec = ABC(...); % 得到 [0;0;0;0;0;0;3;3;3] accumulated_vec = [accumulated_vec; current_vec(end-2:end)]; % 最终结果 [1;1;1;2;2;2;3;3;3]
如果需要调用多次,直接套循环就行:
accumulated_vec = []; call_times = 3; % 你要调用的次数 for i = 1:call_times current_vec = ABC(...); accumulated_vec = [accumulated_vec; current_vec(end-2:end)]; end
方法二:提取所有非零元素(通用场景)
如果以后ABC()返回的向量里,0的位置不固定,但有效数据都是非零值,用这种更灵活的方式:
accumulated_vec = []; % 第一次调用 current_vec = ABC(...); non_zero_part = current_vec(current_vec ~= 0); % 过滤出所有非零元素 accumulated_vec = [accumulated_vec; non_zero_part]; % 后续调用重复上面两步即可
这个方法不管0在什么位置,都能精准提取你需要的有效数值,兼容性更强。
内容的提问来源于stack exchange,提问作者HSS
相关产品推荐
相关产品推荐

