Python中array(10,1)和array(10,)之间的区别

4

我试图将MNIST数据集加载到数组中。当我使用 (X_train, y_train), (X_test, y_test)=mnist.load_data() 时,我得到了一个形状为y_test(10000,)的数组,但我希望它的形状是(10000,1)。数组(10000,1)和数组(10000,)有什么区别?如何将第一个数组转换为第二个数组?

2个回答

5

您的第一个数组形状为(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()

0
  • 一个大小为(10,1)的数组是一个包含空列的二维数组。
  • 一个大小为(10,)的数组是一个一维数组。

要将(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)的数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接