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

如何将object类型的嵌套numpy数组转换为目标三维数值数组

问题解决方法

问题核心原因

你得到object类型数组是因为调用np.asarray()时,输入列表里的子数组形状不统一,numpy无法将其合并为高维数值数组,只能退而求其次生成存储数组对象的数组。
对应到你给出的函数,问题出在循环范围设置错误:你用for i in range(n_records)遍历,当i的取值过大时,X[i : i + stepsBack]和X[i + stepsBack : i + stepsBack + stepsForward]的切片长度会小于你设定的stepsBack、stepsForward,导致所有切片形状不一致。同时原函数中xtest的切片范围逻辑错误,和xtrain存在重复。

解决方法

方法1:从根源修改生成函数,直接输出目标结构

调整循环的取值范围,保证所有切片的长度固定,同时修正测试集切片逻辑:

def walk_forward_train(X, stepsBack, stepsForward, trainTestSplit):
  n_records = len(X)
  X = X[:]
  # 修正循环范围,保证所有切片长度符合要求
  max_i = n_records - stepsBack - stepsForward + 1
  split = int(max_i * trainTestSplit)
  x = []
  y = []
  for i in range(max_i):
    x.append(X[i : i + stepsBack])  
    y.append(X[i + stepsBack : i + stepsBack + stepsForward])

  xtrain = x[:split]
  ytrain = y[:split]

  xtest = x[split: ]
  ytest = y[split: ]
    
  return np.asarray(xtrain), np.asarray(ytrain), np.asarray(xtest), np.asarray(ytest)

方法2:对已生成的object数组做转换

如果你已经生成了object类型的数组,只需要调用np.stack()将所有子数组合并即可,示例代码如下:

# 假设obj_arr是你实际得到的object类型数组
target_arr = np.stack(obj_arr)

转换后的target_arr就是你需要的三维数值数组结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:24:02