【发布时间】:2026-01-23 17:00:02
【问题描述】:
我正在尝试将 MNIST 数据集加载到数组中。 当我使用 (X_train, y_train), (X_test, y_test)= mnist.load_data() 我得到一个数组 y_test(10000,) 但我希望它的形状为 (10000,1)。 array(10000,1) 和 array(10000,) 有什么区别? 如何将第一个数组转换为第二个数组?
【问题讨论】:
我正在尝试将 MNIST 数据集加载到数组中。 当我使用 (X_train, y_train), (X_test, y_test)= mnist.load_data() 我得到一个数组 y_test(10000,) 但我希望它的形状为 (10000,1)。 array(10000,1) 和 array(10000,) 有什么区别? 如何将第一个数组转换为第二个数组?
【问题讨论】:
您的第一个形状为(10000,) 的数组是一维np.ndarray。
由于 numpy Arrays 的 shape 属性是一个元组,并且长度为 1 的元组需要一个尾随逗号,因此形状是 (10000,) 而不是 (10000)(这将是一个 int)。所以目前你的数据看起来像这样:
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] 指定了重新整形操作后新形状的外观。 -1 本身将被 numpy 内部“适合数据”的形状替换。
Reshape 是一个比expand_dims 更强大的功能,并且可以以多种不同的方式使用。您可以在 numpy 文档中阅读有关它的其他用途的更多信息。 numpy.reshape()
【讨论】: