我试图将MNIST数据集加载到数组中。当我使用 (X_train, y_train), (X_test, y_test)=mnist.load_data() 时,我得到了一个形状为y_test(10000,)的数组,但我希望它的形状是(10000,1)。数组(10000,1)和数组(10000,)有什么区别?如何将第一个数组转换为第二个数组?
您的第一个数组形状为(10000,)
,是一个一维的np.ndarray
。
由于numpy数组的shape
属性是元组,长度为1的元组需要有一个逗号来结尾,所以形状应该是(10000,)
而不是(10000)
(这将会是一个整数类型)。因此,您当前的数据如下:
import numpy as np
a = np.arange(5) # >>> array([0, 1, 2, 3, 4]
print(a.shape) # >>> (5,)
(10000, 1)
的二维数组。
添加一个长度为1的维度不需要任何额外的数据,它基本上是一个“空”维度。要向现有数组添加一个维度,可以使用np.expand_dims()
或np.reshape()
中的任一个。np.expand_dims
:import numpy as np
b = np.array(np.arange(5)) # >>> array([0, 1, 2, 3, 4])
b = np.expand_dims(b, axis=1) # >>> array([[0],[1],[2],[3],[4]])
该函数是专门用于向数组添加空维度的。axis关键字指定新添加的维度将占据哪个位置。
使用np.reshape
:
import numpy as np
a = np.arange(5)
X_test_reshaped = np.reshape(a, shape=[-1, 1]) # >>> array([[0],[1],[2],[3],[4]])
shape=[-1, 1]
指定了在reshape操作后新形状的样子。内部numpy将会通过适配数据来替换掉-1。
相比expand_dims
,reshape是一个更加强大多用途的函数。你可以在numpy文档中阅读更多有关其它使用方法的信息。numpy.reshape()
要将(10,1)转换为(10,),您可以简单地折叠列。例如,我们取x
数组,它具有x.shape =(10,1)
。现在使用x [:,0]
,您可以折叠列并且x [:,0].shape =(10,)
。
要将(10,)转换为(10,1),您可以使用np.newaxis
添加一个维度。因此,在import numpy as np
之后,假设我们在这里使用numpy
数组。以y
数组为例,它具有y.shape =(10,)
。使用y [:,np.newaxis]
,您可以获得一个新的形状为(10,1)的数组。