我正在尝试执行代码,但出现此Value错误。 Source.pkl文件包含100个元素,如随附的array.png中所示。
如图中索引0所示,共有16个numpy数组,它们的形状均为(1,59),因此第一个元素的形状为(16,1,59)。在索引1处,有11个numpy数组,它们的形状均为(1,59),因此,第二个元素的形状为(11,1,59),对于其他元素,依此类推。
如何使所有阵列具有相同的形状?
import numpy as np
from keras.layers import Input, LSTM, Dense
from keras.models import Model
pickle_in = open("source.pkl","rb")
predictions = np.load(pickle_in)[0:100]
in_predictions = np.stack(predictions)
pickle_in.close()
答案 0 :(得分:1)
这是两个选择:
向每个列表添加零个数组,直到所有列表的大小相同为止。在您的情况下,假设16个是所有列表中最大的大小,则必须将(1,59)个形状的数组附加到每个列表中,直到它的大小为16。
但是,这是浪费空间。另一个选择是:
将您的列表串联为一个大列表,然后将大列表转换为numpy数组。使用另一个列表来记录最初在哪个列表中的数组。 这是一个示例代码,但我尚未对其进行测试:
pickle_in = open("source.pkl","rb")
predictions = np.load(pickle_in)[0:100]
wrap_list = []
index_map = []
for i in range(len(predictions)):
pred = predictions[i]
wrap_list += pred
index_map += [i for _ in range(len(pred))]
in_predictions = np.array(wrap_list)
pickle_in.close()
希望这对您有所帮助。