ValueError: need at least one array to concatenate
引发原因:从空数组进行连接会引发此错误
报错提示为:
TFT_Dataset类报错相关部分源代码为:
for e in train[entity_column].unique():
entity_group = data[data[entity_column]==e]
data_time_steps = len(entity_group)
if data_time_steps >= decoder_steps:
x = entity_group[input_columns].values.astype(np.float32)
inputs.append(np.stack([x[i:data_time_steps - (decoder_steps - 1) + i, :] for i in range(decoder_steps)], axis=1))
y = entity_group[[target_column]].values.astype(np.float32)
outputs.append(np.stack([y[i:data_time_steps - (decoder_steps - 1) + i, :] for i in range(decoder_steps)], axis=1))
e = entity_group[[entity_column]].values.astype(np.float32)
entity.append(np.stack([e[i:data_time_steps - (decoder_steps - 1) + i, :] for i in range(decoder_steps)], axis=1))
t = entity_group[[time_column]].values.astype(np.int64)
time.append(np.stack([t[i:data_time_steps - (decoder_steps - 1) + i, :] for i in range(decoder_steps)], axis=1))
self.inputs = np.concatenate(inputs, axis=0)
self.outputs = np.concatenate(outputs, axis=0)[:, encoder_steps:, :]
self.entity = np.concatenate(entity, axis=0)
self.time = np.concatenate(time, axis=0)
self.active_inputs = np.ones_like(outputs)
原因:当data为valid的时候,data_time_steps < decoder_steps,故返回的input为空
解决办法:添加当data_time_steps < decoder_steps情况时的处理
else:
return None
具体如下
for e in train[entity_column].unique():
entity_group = data[data[entity_column]==e]
data_time_steps = len(entity_group)
if data_time_steps >= decoder_steps:
x = entity_group[input_columns].values.astype(np.float32)
inputs.append(np.stack([x[i:data_time_steps - (decoder_steps - 1) + i, :] for i in range(decoder_steps)], axis=1))
y = entity_group[[target_column]].values.astype(np.float32)
outputs.append(np.stack([y[i:data_time_steps - (decoder_steps - 1) + i, :] for i in range(decoder_steps)], axis=1))
e = entity_group[[entity_column]].values.astype(np.float32)
entity.append(np.stack([e[i:data_time_steps - (decoder_steps - 1) + i, :] for i in range(decoder_steps)], axis=1))
t = entity_group[[time_column]].values.astype(np.int64)
time.append(np.stack([t[i:data_time_steps - (decoder_steps - 1) + i, :] for i in range(decoder_steps)], axis=1))
else:
return None
self.inputs = np.concatenate(inputs, axis=0)
self.outputs = np.concatenate(outputs, axis=0)[:, encoder_steps:, :]
self.entity = np.concatenate(entity, axis=0)
self.time = np.concatenate(time, axis=0)
self.active_inputs = np.ones_like(outputs)
报错解决