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

如何高效重塑经温度计编码的NumPy数组?含滑动窗口与特定形状需求

高效重塑大规模温度计编码数组

先给出原始代码与参数定义:

import numpy as np 
from numpy.lib.stride_tricks import sliding_window_view

n_features = 4
time_window = 3
n_bins = 3
orig_array = np.array([1,0,2,1,2,1,0,3,1,3,0,1,2,0,3,1,0,1,2,1])

def encode(arr, n_bins):
    res = np.stack([np.pad(np.ones(t), (0,n_bins - t), 'constant') for t in arr])
    return res.flatten()

# 应用温度计编码并初步重塑
enc_array = encode(orig_array, n_bins)
reshp_array = np.reshape(enc_array, (5,12))

问题描述

  1. 生成滑动窗口式编码数组:需要得到形状为(3, 36)的dyn_enc_array,每行对应连续3个时间步的编码特征拼接(每3个整数对应一个编码特征)。
  2. 生成3x4x9形状的目标数组:需要将滑动窗口内的特征编码按[时间窗口×特征bin]的维度重组,最终得到形状为(3,4,9)的result。

解决方案

问题1:高效生成dyn_enc_array

dyn_enc_array本质是对时间步维度做滑动窗口后,将每个窗口内的编码展平。利用sliding_window_view可以直接实现:

# 对时间步维度(轴0)做滑动窗口,窗口大小为time_window
windowed = sliding_window_view(reshp_array, window_shape=time_window, axis=0)
# 将每个窗口的(3,12)结构展平为一维,得到目标数组
dyn_enc_array = windowed.reshape(windowed.shape[0], -1)
  • 输出形状:(3,36),与目标结构完全匹配。

问题2:高效生成3x4x9形状的result

需要先将编码按「时间步-特征-bin」的维度重组,再做滑动窗口并调整轴顺序:

# 第一步:将编码数组重塑为(时间步数, 特征数, bin数)的结构
feat_wise_enc = enc_array.reshape(-1, n_features, n_bins)  # 形状:(5,4,3)

# 第二步:在时间步维度做滑动窗口,窗口大小为time_window
windowed_feat = sliding_window_view(feat_wise_enc, window_shape=time_window, axis=0)  # 形状:(3,3,4,3)

# 第三步:交换轴并合并最后两个维度,得到目标形状
result = windowed_feat.swapaxes(1,2).reshape(windowed_feat.shape[0], n_features, -1)  # 形状:(3,4,9)
  • 逻辑说明:先把每个特征的多时间步编码对齐,再将每个特征的3个时间步bin编码拼接成9个元素的序列,最终得到目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 20:34:53