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

如何修改numpy数组单列计算逻辑,实现多列批量处理生成多列结果数组

实现方案

方案1:NumPy向量化实现(推荐,无需嵌套循环)

该方案利用numpy数组维度变换批量处理所有列,性能远高于循环实现,同时支持自定义窗口大小:

import numpy as np

def calc_window_indicators(total_demand, window_size=48):
    # 若原始total_demand维度为(列数, 时间步),请打开下方转置注释,调整为(时间步, 列数)
    # total_demand = total_demand.T 
    time_steps, n_cols = total_demand.shape
    # 计算有效窗口数,整除保证每个窗口都有window_size个元素
    n_windows = time_steps // window_size
    # 维度拆分:(总时间步, 列数) → (窗口数, 窗口大小, 列数)
    windowed_data = total_demand[:n_windows*window_size].reshape(n_windows, window_size, n_cols)
    
    # 批量计算所有窗口、所有列的指标
    sum_win = windowed_data.sum(axis=1)  # 对应gig_d,维度(窗口数, 列数)
    max_win = windowed_data.max(axis=1)
    min_win = windowed_data.min(axis=1)
    diff_win = max_win - min_win  # 对应subtract_d
    mean_win = sum_win // 12
    reldif_win = mean_win // diff_win  # 对应real_d
    
    return sum_win, diff_win, reldif_win

# 调用示例
gig_d, subtract_d, real_d = calc_window_indicators(total_demand, window_size=48)
  • 输出的三个数组维度均为(窗口数, 列数),每一列对应输入数组同列的计算结果,完全匹配需求
  • 可直接修改window_size参数调整步长,无需硬编码48

方案2:原有循环逻辑改造

如果需要沿用你原有的嵌套循环思路,只需在外层增加列遍历即可:

def calc_window_indicators_loop(total_demand, window_size=48):
    n_cols = total_demand.shape[0]  # 适配你当前(列数, 时间步)的total_demand结构
    n_windows = len(date_calc)
    # 初始化结果数组,维度为(窗口数, 列数)
    gig_d = np.zeros((n_windows, n_cols), dtype=float)
    subtract_d = np.zeros((n_windows, n_cols), dtype=float)
    real_d = np.zeros((n_windows, n_cols), dtype=float)
    
    for col_idx in range(n_cols):
        col_data = total_demand[col_idx] # 提取当前列数据
        s = 0
        e = window_size
        for win_idx in range(n_windows):
            n = col_data[s:e]
            x = sum(n)
            mi = min(n)
            ma = max(n)
            diff = ma - mi
            mean = x//12
            reldif = mean//diff
            s += window_size
            e += window_size
            # 写入对应位置
            gig_d[win_idx, col_idx] = x
            subtract_d[win_idx, col_idx] = diff
            real_d[win_idx, col_idx] = reldif
    
    return gig_d, subtract_d, real_d
  • 注意补充边界判断:如果某个窗口内所有数值相同,diff会为0,计算reldif会触发除零报错,可根据业务逻辑增加异常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:48:05