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

如何基于稀疏存储的时序x/y数据构建完整张量数据集

实现思路
  • 第一步:采集所有时间点的x值,去重后升序排序,得到全局统一的x轴序列
  • 第二步:将每个时间点的(x,y)对转换为哈希查找表(字典),O(1)时间判断x是否存在对应y值
  • 第三步:对每个时间点,遍历全局x序列,从哈希表取值,不存在则补0,生成对应y序列
  • 第四步:将全局x序列和所有时间点的y序列拼接成目标矩阵
纯Python实现(无额外依赖)

适合中小规模数据集,不需要安装第三方库:

# 输入示例:任意数量时间点的存储数据,结构为[(x_list, y_list), (x_list, y_list), ...]
time_series = [
    ([200, 201, 203, 206, 207], [5, 10, 7, 15, 20]),  # t0
    ([201, 204, 206, 207], [10, 15, 3, 20])  # t1
]

# 1. 收集所有x值去重后排序
all_x = set()
for x_list, _ in time_series:
    all_x.update(x_list)
sorted_x = sorted(all_x)

# 2. 逐时间点生成补0后的y序列
result = [sorted_x]
for x_list, y_list in time_series:
    lookup_dict = dict(zip(x_list, y_list))
    full_y = [lookup_dict.get(x, 0) for x in sorted_x]
    result.append(full_y)

print(result)
# 输出:[[200, 201, 203, 204, 206, 207], [5, 10, 7, 0, 15, 20], [0, 10, 0, 15, 3, 20]]
大数据量优化方案(Pandas向量化实现)

如果是百万级以上的x值、数十个以上时间点的大规模数据集,用Pandas向量化操作效率更高:

import pandas as pd

time_series = [
    ([200, 201, 203, 206, 207], [5, 10, 7, 15, 20]),
    ([201, 204, 206, 207], [10, 15, 3, 20])
]

dfs = []
for time_idx, (x_list, y_list) in enumerate(time_series):
    dfs.append(pd.DataFrame({"x": x_list, f"t{time_idx}": y_list}))

# 外连接合并所有数据,缺失值补0,转成目标列表结构
full_df = pd.concat(dfs).groupby("x", as_index=False).sum(numeric_only=True).sort_values("x")
result = full_df.values.T.tolist()

方案优势

  • 时间复杂度低,整体效率远高于嵌套循环匹配的实现
  • 支持任意数量的时间点输入,不需要修改代码逻辑
  • 输出结构完全匹配要求的矩阵格式

内容的提问来源于stack exchange,提问作者Állan Ferrari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:27:02