You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中按指定规则合并相加两个列向量的实现问题

实现方案

核心逻辑梳理

首先明确运算规则的落地步骤:

  • 初始化输出向量output,长度与b完全一致,初始首位置赋值为0(符合首位置非1时赋值0的要求,若首位置为1后续会自动覆盖)
  • 初始化c_idx变量用于追踪当前要取用的c的元素索引,初始值为0
  • 从第二个元素开始遍历b的每一个位置:
    • 若当前b的元素等于1:
      • 如果是第一次遇到1(即c_idx == 0):直接将c[c_idx]赋值给当前output位置
      • 非首次遇到1:将当前output上一位的值加上c[c_idx],赋值给当前位置
      • 完成赋值后将c_idx加1
    • 若当前b的元素不等于1:直接将output上一位的值赋值给当前位置

代码实现示例

Python 实现

import numpy as np

def generate_output(b, c):
    n = len(b)
    output = np.zeros(n)
    c_idx = 0
    for i in range(1, n):
        if b[i] == 1:
            if c_idx == 0:
                output[i] = c[c_idx]
            else:
                output[i] = output[i-1] + c[c_idx]
            c_idx += 1
        else:
            output[i] = output[i-1]
    return output

# 示例测试
b = np.array([0,1,0,1,1,3,1,2,0,1])
c = np.array([0.25, 0.21, 0.33, 0.22, 0.24])
print(generate_output(b, c))
# 输出:[0.   0.25 0.25 0.46 0.79 0.79 1.01 1.01 1.01 1.25] 与示例完全匹配

Matlab 实现

function output = generate_output(b, c)
    n = length(b);
    output = zeros(n, 1);
    c_idx = 1; % Matlab数组索引从1开始
    for i = 2:n
        if b(i) == 1
            if c_idx == 1
                output(i) = c(c_idx);
            else
                output(i) = output(i-1) + c(c_idx);
            end
            c_idx = c_idx + 1;
        else
            output(i) = output(i-1);
        end
    end
end

% 示例测试
b = [0;1;0;1;1;3;1;2;0;1];
c = [0.25; 0.21; 0.33; 0.22;0.24];
generate_output(b,c)
% 输出与示例完全一致

性能说明

该方案时间复杂度为O(n),n为b的长度,即使b长度达到400也完全无性能压力,遍历一次即可完成计算,内存占用仅需要额外存储输出向量和两个索引变量,资源消耗极低。

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 14:09:02