将形状x的数组重塑为形状(x,y)的数组

时间:2020-02-27 07:19:57

标签: python numpy

我正在跟踪一个在数据集上实现K近邻算法的教程。

我有一个形状数组(6003),我想这样做:

data = data.reshape((data.shape[0], 3072))

但是,我遇到此错误:

无法将大小为6003的数组重塑为形状(6003,3072)

对此有任何帮助吗?谢谢!

2 个答案:

答案 0 :(得分:2)

当重塑一个numpy数组时,元素总数不应更改。 例如a =[2,3,4,5,1,7]如果要将此形状整形为2D数组,则相乘的维数应等于原始数组a中的元素总数。 这意味着您可以将数组a整形为(1,6) (2,3),(6,1),(3,2)的维度。

问题的标题确实可以消除错误。

将形状为(x,)的数组重塑为形状为(x,y)的数组

是不可能的,因为您试图在原始数据中添加更多元素。 形状为(x,)的数组只能重塑为形状为(x/y,y)的数组

我希望这会有所帮助。

答案 1 :(得分:1)

您正在尝试重塑为不兼容的形状。现在,我的意思是什么?看这个例子:

a = np.array([[1, 2, 3], 
              [4, 5, 6], 
             ])

此数组的形状为:

a.shape
>> (2, 3)

数组a具有2 x 3 = 6个元素。让我们尝试将其重塑为(2, 6)数组

a.reshape(2, 6)

这引起了

>> ValueError: cannot reshape array of size 6 into shape (2,6)

请注意,我们试图将具有2 x 3 = 6个元素的数组制作为具有2 x 6 = 12个元素的数组。但是NumPy无法将这些额外的元素添加到您的原始数组中并给出您想要的形状。因此它会引发ValueError

在您的情况下,您尝试将包含6003个元素的数组制作成一个包含6003 x 3072 = 18441216个元素的数组!