如何使用NumPy数组将指定列分配至新轴以构建目标3D数组?
从2D表格数据构建tslearn所需的3D时间序列数组
核心思路
要从(10,4)的2D数组得到(3,10,5)的目标3D数组(对应(地点数, 时间序列长度, 产品数)),需要完成列映射分组、产品列补全、维度重组三个关键步骤。
具体操作步骤&代码示例
假设你的原2D数组中,第一列是地点标识(包含3个唯一地点),剩余3列是产品数据,需要补全到5个产品列:
import numpy as np import pandas as pd # 将Google表格数据转为numpy数组(原形状(10,4)) product_data = product_data.to_numpy() # 1. 补全产品列到5个(示例补0,实际根据数据来源调整) # 提取原数据中的产品列,补充2列默认值 product_features = np.hstack([product_data[:, 1:], np.zeros((10, 2))]) # 形状变为(10,5) # 2. 按地点分组,构建目标3D数组 unique_locations = np.unique(product_data[:, 0]) # 初始化符合目标形状的空数组 target_3d_array = np.zeros((len(unique_locations), 10, 5)) # 遍历每个地点,填充对应时间序列数据 for idx, location in enumerate(unique_locations): # 筛选当前地点的所有时间步数据 location_data = product_features[product_data[:, 0] == location] target_3d_array[idx] = location_data # 验证形状:输出应为(3,10,5) print(target_3d_array.shape)
关键注意事项
- 必须明确原数据中哪一列对应地点轴,这是分组的核心依据,确保每个地点恰好有10条时间步数据
- 产品列从4补到5的逻辑需根据实际业务调整,比如从其他关联数据提取、插值填充,而非简单补0
- 最终3D数组的维度顺序必须符合tslearn要求:第一个维度是聚类样本数(地点数),第二个是时间序列长度,第三个是特征维度(产品数)
内容的提问来源于stack exchange,提问作者camote
相关产品推荐
相关产品推荐

