我正在跟踪一个在数据集上实现K近邻算法的教程。
我有一个形状数组(6003),我想这样做:
data = data.reshape((data.shape[0], 3072))
但是,我遇到此错误:
无法将大小为6003的数组重塑为形状(6003,3072)
对此有任何帮助吗?谢谢!
答案 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
个元素的数组!