为了将数据输入LSTM网络以预测剩余使用寿命(RUL),我需要创建3D numpy数组(机器数量,序列数量,变量数量)。
我已经尝试结合stackoverflow的解决方案并设法创建一个原型(您可以在下面看到)。
import numpy as np
import tensorflow as tf
import pandas as pd
df = pd.DataFrame({'ID': [1, 1, 2, 3, 3, 3, 3],
'V1': [1, 2, 2, 3, 3, 4, 2],
'V2': [4, 2, 3, 2, 1, 5, 1],
})
df_desired_result = np.array([[[1, 4], [2, 2], [-99, -99]],
[[2, 3], [-99, -99], [-99, -99]],
[[3, 2], [3, 1], [4, 5]]])
max_len = df['ID'].value_counts().max()
def pad_df(df, cols, max_seq, group_col= 'ID'):
array_for_pad = np.array(list(df[cols].groupby(df[group_col]).apply(pd.DataFrame.as_matrix)))
padded_array = tf.keras.preprocessing.sequence.pad_sequences(array_for_pad,
padding='post',
maxlen=max_seq,
value=-99
)
return padded_array
#testing prototype
pad_df(df, ['V1', 'V2'], max_len)
但是,当我将上述代码应用于数据时,它将正确应用右填充,但所有值均设置为0.0。 我无法完全弄清楚这种行为,我注意到在函数的第一行中,我返回了一个带有嵌套数组的数组,该数组带有“ array_for_pad”的嵌套数组。 这是结果的屏幕截图: result padding