如何将numpy的帧数组转换为帧对数组?是否有可推广至多帧的实现方法?
双帧场景(输出形状400×160)实现
你要的逻辑可以通过数组补位+拼接快速实现,代码如下:
import numpy as np # 示例原数组,形状400×80 origin_arr = np.random.rand(400, 80) # 构造前80列:第一行补0,后续行取上一行的原数据 prefix_col = np.pad(origin_arr[:-1], pad_width=((1, 0), (0, 0)), constant_values=0) # 前后两部分拼接得到最终结果 result = np.concatenate([prefix_col, origin_arr], axis=1)
多帧通用实现
如果要推广到k帧(比如k=3对应输出400×240),可以封装成通用函数,逻辑是先在原数组头部补k-1行0,再按偏移量取对应行数拼接即可:
def convert_to_multi_frame(arr: np.ndarray, frame_num: int) -> np.ndarray: """ arr: 输入二维数组,形状为 (样本数, 单帧特征维度) frame_num: 需要拼接的总帧数 返回: 拼接后的数组,形状为 (样本数, 单帧特征维度 * frame_num) """ row_cnt, feat_dim = arr.shape # 头部补frame_num-1行全0,解决首行前序帧缺数的问题 padded_arr = np.pad(arr, pad_width=((frame_num - 1, 0), (0, 0)), constant_values=0) # 按偏移量取对应帧数据 frame_list = [padded_arr[offset : offset + row_cnt] for offset in range(frame_num - 1, -1, -1)] # 沿特征维度拼接所有帧 return np.concatenate(frame_list, axis=1) # 调用示例:2帧对应题目需求,输出形状400×160 res_2frame = convert_to_multi_frame(origin_arr, frame_num=2) # 调用示例:3帧场景,输出形状400×240 res_3frame = convert_to_multi_frame(origin_arr, frame_num=3)
内容的提问来源于stack exchange,提问作者DuckQueen
相关产品推荐
相关产品推荐

