ValueError:所有输入数组必须具有相同的形状

时间:2018-06-20 17:21:41

标签: arrays python-3.x numpy

我正在尝试执行代码,但出现此Value错误。 Source.pkl文件包含100个元素,如随附的array.png中所示。

如图中索引0所示,共有16个numpy数组,它们的形状均为(1,59),因此第一个元素的形状为(16,1,59)。在索引1处,有11个numpy数组,它们的形状均为(1,59),因此,第二个元素的形状为(11,1,59),对于其他元素,依此类推。

如何使所有阵列具有相同的形状?

Contains 100 elements with different array sizes

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()

1 个答案:

答案 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()

希望这对您有所帮助。